なるようにしかならん

そういうことです

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でした。
もう少し実装見てみないといけないなぁと思うけれど、取り急ぎ。