2

I want to upload a file (an image specifically) to a REST Server using HTTP POST. I have already imported/add to build path httpmime-4.3.1.jar and apache-mime4j-0.6.jar. And I am getting the follow errors below in the Stack Trace.

Is this valid? post.setHeader("enctype", "multipart/form-data");

HTTP POST Code

public void multiPartPost() throws ClientProtocolException, IOException {
    File image = new File(EXTERNALSTORAGE + "/Pictures/sample.jpg");
    FileBody fileBody = new FileBody(image);

    HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost(url);
    post.setHeader("enctype", "multipart/form-data");

    MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create();
    multipartEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
    multipartEntity.addPart("sampleImage", fileBody);
    post.setEntity(multipartEntity.build());

    HttpResponse response = client.execute(post);
    String responseBody = EntityUtils.toString(response.getEntity());
    Log.v("multiPartPost HTTP Response", responseBody);
}

Stack Trace

01-05 17:41:25.470: W/dalvikvm(6564): VFY: unable to resolve static field 1755 (DEFAULT_BINARY) in Lorg/apache/http/entity/ContentType;
01-05 17:41:25.470: D/dalvikvm(6564): VFY: replacing opcode 0x62 at 0x0000
01-05 17:41:25.470: I/dalvikvm(6564): Could not find method org.apache.http.entity.ContentType.create, referenced from method org.apache.http.entity.mime.content.FileBody.<init>
01-05 17:41:25.470: W/dalvikvm(6564): VFY: unable to resolve static method 6613: Lorg/apache/http/entity/ContentType;.create (Ljava/lang/String;)Lorg/apache/http/entity/ContentType;
01-05 17:41:25.470: D/dalvikvm(6564): VFY: replacing opcode 0x71 at 0x0000
01-05 17:41:25.470: I/dalvikvm(6564): Could not find method org.apache.http.entity.ContentType.create, referenced from method org.apache.http.entity.mime.content.FileBody.<init>
01-05 17:41:25.470: W/dalvikvm(6564): VFY: unable to resolve static method 6614: Lorg/apache/http/entity/ContentType;.create (Ljava/lang/String;Ljava/lang/String;)Lorg/apache/http/entity/ContentType;
01-05 17:41:25.470: D/dalvikvm(6564): VFY: replacing opcode 0x71 at 0x0000
01-05 17:41:25.470: W/dalvikvm(6564): VFY: unable to find class referenced in signature (Lorg/apache/http/entity/ContentType;)
01-05 17:41:25.470: W/dalvikvm(6564): VFY: unable to find class referenced in signature (Lorg/apache/http/entity/ContentType;)
01-05 17:41:25.478: W/dalvikvm(6564): VFY: unable to find class referenced in signature (Lorg/apache/http/entity/ContentType;)
01-05 17:41:25.478: W/dalvikvm(6564): VFY: unable to find class referenced in signature (Lorg/apache/http/entity/ContentType;)
01-05 17:41:25.478: I/dalvikvm(6564): Could not find method org.apache.http.util.Args.notNull, referenced from method org.apache.http.entity.mime.content.FileBody.<init>
01-05 17:41:25.478: W/dalvikvm(6564): VFY: unable to resolve static method 6808: Lorg/apache/http/util/Args;.notNull (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
01-05 17:41:25.478: D/dalvikvm(6564): VFY: replacing opcode 0x71 at 0x0005
01-05 17:41:25.478: I/dalvikvm(6564): Could not find method org.apache.http.util.Args.notNull, referenced from method org.apache.http.entity.mime.content.FileBody.writeTo
01-05 17:41:25.478: W/dalvikvm(6564): VFY: unable to resolve static method 6808: Lorg/apache/http/util/Args;.notNull (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
01-05 17:41:25.478: D/dalvikvm(6564): VFY: replacing opcode 0x71 at 0x0002
01-05 17:41:25.478: I/dalvikvm(6564): Could not find method org.apache.http.entity.ContentType.parse, referenced from method org.apache.http.entity.mime.content.AbstractContentBody.<init>
01-05 17:41:25.478: W/dalvikvm(6564): VFY: unable to resolve static method 6618: Lorg/apache/http/entity/ContentType;.parse (Ljava/lang/String;)Lorg/apache/http/entity/ContentType;
01-05 17:41:25.486: D/dalvikvm(6564): VFY: replacing opcode 0x71 at 0x0000
01-05 17:41:25.486: W/dalvikvm(6564): VFY: unable to find class referenced in signature (Lorg/apache/http/entity/ContentType;)
01-05 17:41:25.486: I/dalvikvm(6564): Could not find method org.apache.http.util.Args.notNull, referenced from method org.apache.http.entity.mime.content.AbstractContentBody.<init>
01-05 17:41:25.486: W/dalvikvm(6564): VFY: unable to resolve static method 6808: Lorg/apache/http/util/Args;.notNull (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
01-05 17:41:25.486: D/dalvikvm(6564): VFY: replacing opcode 0x71 at 0x0005
01-05 17:41:25.486: I/dalvikvm(6564): Could not find method org.apache.http.entity.ContentType.getCharset, referenced from method org.apache.http.entity.mime.content.AbstractContentBody.getCharset
01-05 17:41:25.486: W/dalvikvm(6564): VFY: unable to resolve virtual method 6616: Lorg/apache/http/entity/ContentType;.getCharset ()Ljava/nio/charset/Charset;
01-05 17:41:25.486: D/dalvikvm(6564): VFY: replacing opcode 0x6e at 0x0002
01-05 17:41:25.486: W/dalvikvm(6564): VFY: unable to find class referenced in signature (Lorg/apache/http/entity/ContentType;)
01-05 17:41:25.486: I/dalvikvm(6564): Could not find method org.apache.http.entity.ContentType.getMimeType, referenced from method org.apache.http.entity.mime.content.AbstractContentBody.getMediaType
01-05 17:41:25.486: W/dalvikvm(6564): VFY: unable to resolve virtual method 6617: Lorg/apache/http/entity/ContentType;.getMimeType ()Ljava/lang/String;
01-05 17:41:25.486: D/dalvikvm(6564): VFY: replacing opcode 0x6e at 0x0002
01-05 17:41:25.493: I/dalvikvm(6564): Could not find method org.apache.http.entity.ContentType.getMimeType, referenced from method org.apache.http.entity.mime.content.AbstractContentBody.getMimeType
01-05 17:41:25.493: W/dalvikvm(6564): VFY: unable to resolve virtual method 6617: Lorg/apache/http/entity/ContentType;.getMimeType ()Ljava/lang/String;
01-05 17:41:25.493: D/dalvikvm(6564): VFY: replacing opcode 0x6e at 0x0002
01-05 17:41:25.493: I/dalvikvm(6564): Could not find method org.apache.http.entity.ContentType.getMimeType, referenced from method org.apache.http.entity.mime.content.AbstractContentBody.getSubType
01-05 17:41:25.493: W/dalvikvm(6564): VFY: unable to resolve virtual method 6617: Lorg/apache/http/entity/ContentType;.getMimeType ()Ljava/lang/String;
01-05 17:41:25.493: D/dalvikvm(6564): VFY: replacing opcode 0x6e at 0x0002
01-05 17:41:25.493: W/dalvikvm(6564): threadid=11: thread exiting with uncaught exception (group=0x40dc51f8)
01-05 17:41:25.501: E/AndroidRuntime(6564): FATAL EXCEPTION: AsyncTask #1
01-05 17:41:25.501: E/AndroidRuntime(6564): java.lang.RuntimeException: An error occured while executing doInBackground()
01-05 17:41:25.501: E/AndroidRuntime(6564):     at android.os.AsyncTask$3.done(AsyncTask.java:287)
01-05 17:41:25.501: E/AndroidRuntime(6564):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
01-05 17:41:25.501: E/AndroidRuntime(6564):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
01-05 17:41:25.501: E/AndroidRuntime(6564):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
01-05 17:41:25.501: E/AndroidRuntime(6564):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
01-05 17:41:25.501: E/AndroidRuntime(6564):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:217)
01-05 17:41:25.501: E/AndroidRuntime(6564):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
01-05 17:41:25.501: E/AndroidRuntime(6564):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
01-05 17:41:25.501: E/AndroidRuntime(6564):     at java.lang.Thread.run(Thread.java:856)
01-05 17:41:25.501: E/AndroidRuntime(6564): Caused by: java.lang.NoClassDefFoundError: org.apache.http.entity.ContentType
01-05 17:41:25.501: E/AndroidRuntime(6564):     at org.apache.http.entity.mime.content.FileBody.<init>(FileBody.java:89)
01-05 17:41:25.501: E/AndroidRuntime(6564):     at com.medusa.checkit.HTTPPostRequest.multiPartPost(HTTPPostRequest.java:79)
01-05 17:41:25.501: E/AndroidRuntime(6564):     at com.medusa.checkit.MenuActivity$BackgroundTask.doInBackground(MenuActivity.java:79)
01-05 17:41:25.501: E/AndroidRuntime(6564):     at com.medusa.checkit.MenuActivity$BackgroundTask.doInBackground(MenuActivity.java:1)
01-05 17:41:25.501: E/AndroidRuntime(6564):     at android.os.AsyncTask$2.call(AsyncTask.java:273)
01-05 17:41:25.501: E/AndroidRuntime(6564):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
01-05 17:41:25.501: E/AndroidRuntime(6564):     ... 5 more
The Nomad
  • 7,155
  • 14
  • 65
  • 100

1 Answers1

9

You seem to be missing a dependency.

I have httpclient-4.2.5, httpcleint-cache-4.2.5, httpcore-4.2.4 and httpmime-4.2.5 with commons-lang3-3.1 and commons-logging-1.1.2 jars in my class path.

I also use entity.addPart(formFieldName, new FileBody(file, "image/jpeg")); instead of using the header property.

Take a look at Internet media type for more details

MadProgrammer
  • 343,457
  • 22
  • 230
  • 366
  • That makes a nice change ;) – MadProgrammer Jan 06 '14 at 02:26
  • Also, the reason I was using `setHeader` was because when uploading to the REST server, it wouldn't put it in the `FILES` folder. And apparently setting `enctype=multipart/form-data` does that. Would I be able to use `enctype=multipart/form-data` as the second parameter of `FileBody`? – The Nomad Jan 06 '14 at 02:28
  • Don't know, give it try. Mind you, if it's already working, then you might need it. It was the only (significant) differences I could see between your code and my code ;) – MadProgrammer Jan 06 '14 at 02:29
  • Just tested your method for the header property, and for `REST` servers specifically, you need to `setHeader` for the file to end up in the right folder. – The Nomad Jan 06 '14 at 02:45
  • 1
    Please don't edit answers, it ruins he continually between the question and accosted newer, instead, leave comments that highlight the changes to the API, stating the version the change occurred, as not everyone will be using the same version... – MadProgrammer Mar 21 '14 at 22:35