Comme j'ai eu des problèmes avec la fonction de POST des images sur Android et de les enregistrer sur le serveur, je les écris comme mon propre mémorandum et ma propre sortie. Je n'ai pas travaillé sur le programme depuis six mois, donc cela peut être étrange, mais pardonnez-moi s'il vous plaît.
J'ai reçu votre point. Je vous remercie!
OkHTTP2 est traité comme obsolète. Assurez-vous d'utiliser la dernière version 4.3.1.
https://square.github.io/okhttp/changelog_3x/#version-300-rc1 https://square.github.io/okhttp/changelog/
J'utilise OkHttp dans Android Studio.
implementation 'com.squareup.okhttp:okhttp:2.7.5'
#### **`Ajoutée.(2.7.Changez 5 selon la varsion.)~~`**
build.gradle
//~~ Omis ~~
dependencies{
//~~ Omis ~~
implementation 'com.squareup.okhttp:okhttp:4.3.1'//Postscript
}
Terminé.
AsyncTask Puisqu'il est envoyé par communication Http, il est effectué de manière asynchrone.
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 à envoyer";
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);
}
}
J'ai fait beaucoup de changements, donc je l'ai réécrit. Aussi, avec le changement
java.io.IOException: Cleartext HTTP traffic to example.com not permitted
Vous pouvez voir une erreur comme celle-ci.
En effet, la communication HTTPS est utilisée par défaut, il est donc nécessaire d'écrire une méthode pour autoriser la communication HTTP. Pour plus d'informations sur la façon de procéder, veuillez consulter ici.
<détails> Enregistrez simplement le fichier publié. L'histoire de l'utilisation d'OkHttp pour la première fois
https://qiita.com/LyricalMaestro0/items/698c77f5a964b5658bbb
Recommended Posts
OkHttpTask_old.java
/**Effacer
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 du message
String url = "http://";
File file = new File(params[0]);
/**Effacer
*Définissez le contenu sur POST ici
RequestBody requestBody = new MultipartBuilder()
.type(MultipartBuilder.FORM)
.addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse("image/jpg"), file))
.build();
*/
//Définissez le contenu sur POST ici(Changer ici)
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 de l'image à envoyer
private Uri _imageUri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Appelez ici
new OkHttpTask().execute(url);
}
Bénéficiaire
UpLoad.java
@WebServlet("/Upload")
@MultipartConfig(location = "Emplacement de stockage")
public class upload extends HttpServlet {
public void doPost(HttpServletRequest req,HttpServletResponse res) throws IOException, ServletException {
String name="no_name";
//multipart/form-Obtenir tous les éléments Part de cette demande fournis par les données
for (Part part : req.getParts()) {
//Obtenir le nom
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);
}
}
}
}
}
Lien de référence