Foto mit HttpPost MultiPartEntityBuilder hochladen

Lesezeit: 4 Minuten

Foto mit HttpPost MultiPartEntityBuilder hochladen
Filip Luchianenco

Ich versuche, das aufgenommene Foto auf den Server hochzuladen. das ist was ich mache:

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();

Ich bekomme diesen Fehler:

11-29 13:12:14.924: E/AndroidRuntime(15781): Verursacht durch: java.lang.NoClassDefFoundError: org.apache.http.entity.ContentType 11-29 13:12:14.924: E/AndroidRuntime(15781): at org.apache.http.entity.mime.content.FileBody.(FileBody.java:89) 11-29 13:12:14.924: E/AndroidRuntime(15781): at com.petcial.petopen.custom.JSONParser.makePostFileRequest (JSONParser.java:221)

Was mache ich falsch?


Aktualisieren

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();

hier ist der fehler:

11-29 14:00:33.364: E/AndroidRuntime(19478): Verursacht durch: java.lang.NoClassDefFoundError: org.apache.http.util.Args 11-29 14:00:33.364: E/AndroidRuntime(19478): at org.apache.http.entity.mime.content.AbstractContentBody.(AbstractContentBody.java:48) 11-29 14:00:33.364: E/AndroidRuntime(19478): at org.apache.http.entity.mime.content .InputStreamBody.(InputStreamBody.java:69) 11-29 14:00:33.364: E/AndroidRuntime(19478): at org.apache.http.entity.mime.content.InputStreamBody.(InputStreamBody.java:62) 11- 29 14:00:33.364: E/AndroidRuntime(19478): at com.petcial.petopen.custom.JSONParser.makePostFileRequest(JSONParser.java:233)

Diese Bibliotheken haben mein Problem gelöst:

Foto mit HttpPost MultiPartEntityBuilder hochladen

  • FileBody gehört nicht zur Standard-Android-Bibliothek. Welches Gefäß verwendest du?

    – gunar

    29. November ’13 um 11:20

  • Hast du httpmime-4.3.jar im Projekt hinzugefügt?

    – Ich freue mich auf

    29. November ’13 um 11:22

  • Natürlich. im libs-Ordner

    – Filip Luchianenco

    29. November ’13 um 11:23

  • Welche IDE verwendest du? Finsternis? Wenn ja, stellen Sie sicher, dass es hinzugefügt und exportiert wurde, wie in dieser Antwort

    – gunar

    29. November ’13 um 11:23


  • Hi, @FilipLuch hast du eine Lösung für dieses Problem gefunden?

    – farrukh

    24. Februar ’15 um 23:23


Bildbeschreibung hier eingeben
Überprüfen Sie das Glas auf der Registerkarte “Bestellen und Exportieren” und führen Sie es aus.

  • Ich tat. immer noch die gleiche Fehlermeldung in Zeile 221. Vielleicht stimmt etwas mit dem Code nicht?

    – Filip Luchianenco

    29. November ’13 um 11:28

  • danke für die Hilfe. Ich habe meine Frage aktualisiert, da es eine weitere Bibliothek gibt, die mein Projekt benötigt.

    – Filip Luchianenco

    1. Dez. ’13 um 19:40

Foto mit HttpPost MultiPartEntityBuilder hochladen
Krystian

Es gibt meine funktionierende Lösung zum Senden von Bildern mit Post unter Verwendung von Apache-HTTP-Bibliotheken (sehr wichtig hier ist das Hinzufügen von Grenzen. Ohne es funktioniert es in meiner Verbindung nicht):

ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos);
byte[] imageBytes = baos.toByteArray();

HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(StaticData.AMBAJE_SERVER_URL + StaticData.AMBAJE_ADD_AMBAJ_TO_GROUP);

String boundary = "-------------" + System.currentTimeMillis();

httpPost.setHeader("Content-type", "multipart/form-data; boundary="+boundary);

ByteArrayBody bab = new ByteArrayBody(imageBytes, "pic.png");
StringBody sbOwner = new StringBody(StaticData.loggedUserId, ContentType.TEXT_PLAIN);
StringBody sbGroup = new StringBody("group", ContentType.TEXT_PLAIN);

HttpEntity entity = MultipartEntityBuilder.create()
                    .setMode(HttpMultipartMode.BROWSER_COMPATIBLE)
                    .setBoundary(boundary)
                    .addPart("group", sbGroup)
                    .addPart("owner", sbOwner)
                    .addPart("image", bab)
                    .build();

httpPost.setEntity(entity);

try {
       HttpResponse response = httpclient.execute(httpPost);
       ...then reading response

  • Du hast mich davor bewahrt, einen weiteren Tag zu verlieren!! Ich habe mich stundenlang in Stackoverflow umgesehen und nachdem ich die Grenze hinzugefügt hatte, funktionierte es! DANKE SCHÖN

    – fersarr

    6. Okt ’14 um 16:17

Übergeben Sie besser den Pfad der Bilddatei. Unten ist mein Code, den ich verwendet habe, um das Bild auf den Server hochzuladen.

public class UploadProductDetails {


    public void uploadProductDetails(String filePath, String fileName)
    {

        InputStream inputStream;
        try
        {
            inputStream = new FileInputStream(new File(filePath));
            byte[] data;
            try
            {
                data = IOUtils.toByteArray(inputStream);

                HttpClient httpClient = new DefaultHttpClient();

                httpClient.getParams().setParameter(CoreProtocolPNames.USER_AGENT,
                        System.getProperty("http.agent"));



                HttpPost httpPost = new HttpPost("http://ipaddress");


                InputStreamBody inputStreamBody = new InputStreamBody(new ByteArrayInputStream(data), "abc.png");
                MultipartEntity multipartEntity = new MultipartEntity();
                multipartEntity.addPart("file", inputStreamBody);


                httpPost.setEntity(multipartEntity);
                HttpResponse httpResponse = httpClient.execute(httpPost);

                // Handle response back from script.
                if(httpResponse != null) {
                    //Toast.makeText(getBaseContext(),  "Upload Completed. ", 2000).show();

                } else { // Error, no response.
                    //Toast.makeText(getBaseContext(),  "Server Error. ", 2000).show();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        }
    }

}

  • Wenn Sie Ihre zweite Antwort oder Meinung abgeben möchten, fügen Sie diese Antwort zu Ihrer ersten Antwort hinzu und bearbeiten Sie sie.

    – Piyush

    29. November ’13 um 11:35

  • Ich erhalte einen Fehler beim Typ org.apache.http.entity.ContentType cannot be resolved. It is indirectly referenced from required .class files an InputStreamBody inputStreamBody = new InputStreamBody(new ByteArrayInputStream(data), "abc.png");

    – Filip Luchianenco

    29. November ’13 um 11:49

  • blog.tacticalnuclearstrike.com/2010/01/… und

    – Ich freue mich auf

    29. November ’13 um 11:55

  • Sie können diese Links verwenden, um Ihre Lösung zu erhalten.

    – Ich freue mich auf

    29. November ’13 um 11:56

  • Ich habe die benötigten Libs hinzugefügt. aber ich bekomme immer noch die gleiche Art von Fehler. was könnte das Problem sein? Bitte überprüfen Sie die aktualisierte Frage

    – Filip Luchianenco

    29. November ’13 um 12:03


.

231960cookie-checkFoto mit HttpPost MultiPartEntityBuilder hochladen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy