2014-01-06 2 views
2

Я хочу загрузить файл (изображение специально) на сервер REST с помощью HTTP POST. Я уже импортировал/добавлял путь сборки httpmime-4.3.1.jar и apache-mime4j-0.6.jar. И я получаю следующие ошибки ниже в Trace Stack.Загрузить файл по HTTP POST

Действительно ли это? post.setHeader("enctype", "multipart/form-data");

HTTP POST код

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

Трассировка стека

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 

ответ

9

Вы, кажется, отсутствует зависимость.

У меня есть httpclient-4.2.5, httpcleint-cache-4.2.5, httpcore-4.2.4 и httpmime-4.2.5 с commons-lang3-3.1 и commons-logging-1.1.2 банки в моем пути к классам.

Я также использую entity.addPart(formFieldName, new FileBody(file, "image/jpeg")); вместо использования свойства заголовка.

Посмотрите на Internet media type для получения более подробной информации

+0

Прекрасно работает сейчас спасибо! –

+0

Это делает приятное изменение;) – MadProgrammer

+0

Кроме того, причина, по которой я использовал 'setHeader', заключалась в том, что при загрузке на сервер REST он не помещал его в папку' FILES'. И, по-видимому, установка 'enctype = multipart/form-data' делает это. Смогу ли я использовать 'enctype = multipart/form-data' как второй параметр' FileBody'? –

Смежные вопросы