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