commons httpClient(3系)で画像ファイルをアップロードする
こちらを参考にさせていただいたのだが、アップするAPIのサーバーでコケてた。
http://d.hatena.ne.jp/idesaku/20081029/1225254524
content-Typeが上記の書き方だと、application/octet-streamとかなっちゃうので
multipartで送りつつ、bodyにContent-Type: image/jpegも設定したい、そんな時は
以下のように書くとOKっぽい。
(ブラウザの画像UP用のformから送った場合を再現したかったので。)
<修正前>
File imgFile = new File(filePath); // new FilePart(フィールド名, ファイル名, ファイルデータ); Part[] parts = new Part[] {new FilePart("profImg", imgFile.getName(), imgFile)}; post.setRequestEntity(new MultipartRequestEntity(parts, post.getParams())); int statusCode = httpClient.executeMethod(post);
<修正後>
File imgFile = new File(filePath); // new FilePart(フィールド名, ファイル名, ファイルデータ); Part[] parts = new Part[] {new FilePart("profImg", imgFile.getName(), imgFile, "image/jpeg", FilePart.DEFAULT_CHARSET)}; post.setRequestEntity(new MultipartRequestEntity(parts, post.getParams())); int statusCode = httpClient.executeMethod(post);
本当はcontent-typeの所はちゃんとそのファイル毎に合わせてやらんとダメですけど。
ちなみに、
PostMethod post = new PostMethod(uri); post.setRequestHeader("Content-Type", "image/jpeg");
みたいな感じで別途content-typeを指定すると、multipartの方のcontent-typeがちゃんと送られなくなってしまうのでNGでした。
もう少し実装見てみないといけないなぁと思うけれど、取り急ぎ。