Télécharger une Photo à l'aide de HttpPost MultiPartEntityBuilder
Je suis en train de télécharger la photo prise au serveur. c'est ce que je fais:
public JSONObject makePostFileRequest(String url, String photoFile) {
try {
//photoFile = /path/tofile/pic.jpg
DefaultHttpClient httpClient = GlobalData.httpClient;
HttpPost httpPost = new HttpPost(url);
File file = new File(photoFile);
FileBody fileBody = new FileBody(file); //here is line 221
MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create();
multipartEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
multipartEntity.addPart("PhotoMessage", fileBody);
httpPost.setEntity(multipartEntity.build());
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
J'obtiens cette erreur:
11-29 13:12:14.924: E/AndroidRuntime(15781): Causé par:
java.lang.NoClassDefFoundError: org.apache.http.de l'entité.ContentType
11-29 13:12:14.924: E/AndroidRuntime(15781): au org.apache.http.de l'entité.le mime.contenu.FileBody.(FileBody.java:89)
11-29 13:12:14.924: E/AndroidRuntime(15781): au com.petcial.petopen.la coutume.JSONParser.makePostFileRequest(JSONParser.java:221)
Ce que je fais mal?
Mise à jour
InputStream inputStream;
inputStream = new FileInputStream(new File(photoFile));
byte[] data;
data = IOUtils.toByteArray(inputStream);
httpClient.getParams().setParameter(CoreProtocolPNames.USER_AGENT,
System.getProperty("http.agent"));
InputStreamBody inputStreamBody = new InputStreamBody(new ByteArrayInputStream(data), "Pic.jpg");
MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create();
multipartEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
multipartEntity.addPart("PhotoMessage", inputStreamBody);
httpPost.setEntity(multipartEntity.build());
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
voici l'erreur:
11-29 14:00:33.364: E/AndroidRuntime(19478): Causé par:
java.lang.NoClassDefFoundError: org.apache.http.util.Args 11-29
14:00:33.364: E/AndroidRuntime(19478): à
org.apache.http.de l'entité.le mime.contenu.AbstractContentBody.(AbstractContentBody.java:48)
11-29 14:00:33.364: E/AndroidRuntime(19478): au org.apache.http.de l'entité.le mime.contenu.InputStreamBody.(InputStreamBody.java:69)
11-29 14:00:33.364: E/AndroidRuntime(19478): à
org.apache.http.de l'entité.le mime.contenu.InputStreamBody.(InputStreamBody.java:62)
11-29 14:00:33.364: E/AndroidRuntime(19478): à
com.petcial.petopen.la coutume.JSONParser.makePostFileRequest(JSONParser.java:233)
ces bibliothèques résolu mon problème:
FileBody
n'appartient pas à la norme Android bibliothèque. Ce pot que vous utilisez?- ont u ajoutée httpmime-4.3.jar dans le projet?
- bien sûr. dans le dossier libs
- Quelle IDE utilisez-vous? Eclipse? Si donc, assurez-vous qu'il est ajouté et exportés, comme dans cette réponse
- Salut, @FilipLuch avez vous trouvez une solution pour ce problème?
- oui. découvrez la dernière mise à jour de ma question, et l'on a accepté la réponse.
Vous devez vous connecter pour publier un commentaire.
Vérifiez que le pot dans l'Ordre et onglet Exporter et de les exécuter.
Il est ma solution de travail pour l'envoi de l'image à afficher, à l'aide d'apache http bibliothèques (très important ici est la limite d'ajouter que Cela ne marchera pas sans elle dans ma connexion):
Mieux vous transmettre le chemin d'accès du fichier image. Ci-dessous mon code que j'ai utilisé pour charger l'image sur le serveur.
org.apache.http.entity.ContentType cannot be resolved. It is indirectly referenced from required .class files
surInputStreamBody inputStreamBody = new InputStreamBody(new ByteArrayInputStream(data), "abc.png");
MultipartEntity
pasMultipartEntityBuilder
aussi j'ai besoin d'utiliser HttpClientNotez que l'utilisation de ce code:
new InputStreamBody(new ByteArrayInputStream(yourByteArray))
peut entraîner des problèmes, parce qu'il renvoie-1
lors de l'appel degetContentLength()
.Au lieu de cela, utilisez ceci:
new ByteArrayBody(yourByteArray)