Androidアプリで端末からの画像をアップロードする際に結構ハマったのでメモ。
org.apache.http.entity.mime.MultipartEntityBuilderでUPloadしようとすると「java.lang.NoSuchFieldError: org.apache.http.message.BasicHeaderValueFormatter.INSTANCE」
が発生。
ライブラリはApacheのhttpmime-4.5.jarを使っていたのですがあれこれ調べると「httpclient-android 4.3.5」も必要な感じ。
httpmime-4.5.jarと合わせてAndroidStudioのModule.appに設定。
これでOKかと思ったのですがまたまたエラー。どうやらそれぞれのライブラリの相性が悪いらしくhttpmime-4.5.jarをhttpclient-androidにあわせることに
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
//省略
//fileUploadではhttpclient-androidと:httpmime:4.3.5のバージョンを同じにしている方がいいみたい
compile group: 'org.apache.httpcomponents' , name: 'httpclient-android' , version: '4.3.5'
compile('org.apache.httpcomponents:httpmime:4.3.5') {
exclude module: "httpclient"
}
}とりあえず解決。ちなみにAndroidでMultipartEntityBuilderを使ったファイルアップロードはこんな感じ
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("enctype", "multipart/form-data");
MultipartEntityBuilder multiPartEntityBuilder = MultipartEntityBuilder.create();
multiPartEntityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
multiPartEntityBuilder.setCharset(Charset.forName("UTF-8"));
File file = new File(filePath);
FileBody bin = new FileBody(file);
multiPartEntityBuilder.addPart("filedata", bin);
HttpEntity postEntity = multiPartEntityBuilder.build();
httpPost.setEntity(postEntity);
