Da ich Probleme mit der Funktion hatte, Bilder auf Android zu POSTEN und auf dem Server zu speichern, schreibe ich sie als mein eigenes Memorandum und meine eigene Ausgabe. Ich habe seit einem halben Jahr nicht mehr an dem Programm gearbeitet, daher mag es seltsam sein, aber bitte vergib mir.
Ich habe Ihren Punkt erhalten. Vielen Dank!
OkHTTP2 wird als veraltet behandelt. Stellen Sie sicher, dass Sie die neueste Version 4.3.1 verwenden.
https://square.github.io/okhttp/changelog_3x/#version-300-rc1 https://square.github.io/okhttp/changelog/
Ich benutze OkHttp in Android Studio.
implementation 'com.squareup.okhttp:okhttp:2.7.5'
#### **`Hinzugefügt.(2.7.Ändern Sie 5 je nach Variante.)~~`**
Implementation'com.squareup.okhttp: okhttp: 4.3.1 '
Hinzugefügt.
(Geändert am 24. Januar 2020)build.gradle
//~~ weggelassen ~~
dependencies{
//~~ weggelassen ~~
implementation 'com.squareup.okhttp:okhttp:4.3.1'//Nachtrag
}
Erledigt.
AsyncTask Da es per HTTP-Kommunikation gesendet wird, erfolgt es asynchron.
OkHttpTask.java
import android.os.AsyncTask;
import android.util.Log;
import java.io.File;
import java.io.IOException;
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class HttpTask extends AsyncTask<String, Void, String> {
String responseBody;
public HttpTask(){}
@Override
protected String doInBackground(String... params) {
String url = "URL zum Senden";
MediaType media = MediaType.parse("multipart/form-data");
try {
File file = new File(params[0]);
String FileName = file.getName();
String boundary = String.valueOf(System.currentTimeMillis());
RequestBody requestBody = new MultipartBody.Builder(boundary).setType(MultipartBody.FORM)
.addFormDataPart("file", FileName, RequestBody.create(media, file))
.build();
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
OkHttpClient client = new OkHttpClient();
Response response = client.newCall(request).execute();
responseBody = response.body().string();
return responseBody;
} catch (IOException e) {
e.printStackTrace();
}
return responseBody;
}
@Override
protected void onPostExecute(String result) {
Log.d("a",result);
}
}
Ich habe viele Änderungen vorgenommen, also habe ich es umgeschrieben. Auch mit der Änderung
java.io.IOException: Cleartext HTTP traffic to example.com not permitted
Möglicherweise wird ein solcher Fehler angezeigt.
Dies liegt daran, dass die HTTPS-Kommunikation standardmäßig verwendet wird. Daher muss eine Methode geschrieben werden, um die HTTP-Kommunikation zu ermöglichen. Weitere Informationen dazu finden Sie unter hier.
OkHttpTask_old.java
/**Löschen
import com.squareup.okhttp.MediaType;
import com.squareup.okhttp.MultipartBuilder;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.RequestBody;
import com.squareup.okhttp.Response;
*/
import okhttp3.MediaType;
import okhttp3.MultipartBody;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class OkHttpTask extends AsyncTask<String, Void, String> {
public OkHttpTask(){}
@Override
protected String doInBackground(String... params) {
//URL posten
String url = "http://";
File file = new File(params[0]);
/**Löschen
*Stellen Sie den Inhalt hier auf POST
RequestBody requestBody = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse("image/jpg"), file))
.build();
*/
//Stellen Sie den Inhalt hier auf POST(Hier ändern)
RequestBody requestBody = new MultipartBody.Builder()
.addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse("image/jpg"), file))
.build();
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(url)
.post(requestBody)
.build();
String result="";
try {
Response response = client.newCall(request).execute();
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
{
result = response.body().string();
}
} catch (Exception e) {}
return result;
}
@Override
protected void onPostExecute(String result) {
Log.d("end:",result);
}
}
*/
MainActivity.java
public class MainActivity extends AppCompatActivity {
//URI des zu sendenden Bildes
private Uri _imageUri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Rufen Sie hier an
new OkHttpTask().execute(url);
}
Speichern Sie einfach die veröffentlichte Datei.
UpLoad.java
@WebServlet("/Upload")
@MultipartConfig(location = "Lagerraum")
public class upload extends HttpServlet {
public void doPost(HttpServletRequest req,HttpServletResponse res) throws IOException, ServletException {
String name="no_name";
//multipart/form-Holen Sie sich alle Teilelemente dieser Anfrage durch Daten
for (Part part : req.getParts()) {
//Name holen
for (String cd : part.getHeader("Content-Disposition").split(";")) {
String str = cd.trim();
if (str.startsWith("filename")) {
String str2 = str.substring(cd.indexOf('=') + 1).trim().replace("\"", "");
File f = new File(str2);
name = f.getName();
part.write(name);
}
}
}
}
}
Die Geschichte der ersten Verwendung von OkHttp https://qiita.com/LyricalMaestro0/items/698c77f5a964b5658bbb
Recommended Posts