- - PR -
HTTPClient3.1でファイルが送信できません。
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-11-20 16:09
某オークションサイト用のファイル自動アップデートソフトを作っているのですが
どうにもうまくいきません。 ファイルを送信した上で、ステータス500が返らない状態ではあるのですが、 実際にサイトを見るとファイルのアップロードができていない状態です。 パケットキャプチャを見ても送信できている節はあるのですが サーバ側で解析できないのか何なのか、アップロードされたファイルとしては 表示されません。 どなたか詳しい方いらっしゃいましたら 何か手がかりをいただけたらと思います。 ちなみにHTTPClientは3.1を利用しています。 アップロード仕様としているファイルはhoge.zipというファイルです。 HTMLは↓のような感じです。 <FORM METHOD=POST ENCTYPE="multipart/form-data" ACTION="/bin/batch_upload"> <TABLE CELLPADDING="0" CELLSPACING="4" BORDER="0" WIDTH="100%"> <TR> <TD WIDTH="1%" NOWRAP><SMALL>ファイル:</SMALL></TD> <TD WIDTH="99%"><SMALL> <INPUT TYPE=HIDDEN NAME=action VALUE=upload> <INPUT TYPE=HIDDEN NAME=uploadpath VALUE="/home/apache/htdocs/work_users/X/X/X/X/xxxxxx.batchup"> <INPUT TYPE=FILE NAME=upfile SIZE="40" VALUE="参照..."> </SMALL></TD> </TR> <TR> <TD><SMALL> </SMALL></TD> <TD><SMALL> <INPUT TYPE=SUBMIT VALUE="アップロード"> </SMALL></TD> </TR> </TABLE> </FORM> ソースは↓↓のような感じです。 private int uploadFile(File file) throws IOException { PostMethod postMethod = new PostMethod("http://batchsubmit.auctions.yahoo.co.jp/bin/batch_upload"); Part[] parts = { // ファイルのアップロード(第一引数は"upfile"?) new FilePart(file.getName(), file), // その他のフォームデータ new StringPart("action", "upload"), new StringPart("uploadpath", "/home/apache/htdocs/work_users/X/X/X/X/xxxxxx.batchup"), }; postMethod.setRequestEntity(new MultipartRequestEntity(parts, postMethod.getParams())); int statusCode = client.executeMethod(postMethod); // body を取得 BufferedReader reader = new BufferedReader(new InputStreamReader(postMethod.getResponseBodyAsStream(), "EUC-JP")); postMethod.releaseConnection(); return statusCode; } |
|
投稿日時: 2008-11-21 02:33
ブラウザで普通に送った場合とアプリケーションで送った場合、リクエストにどのような違いがあるかどうか見比べてみてはいかがでしょう。
|
|
投稿日時: 2008-11-21 12:45
インギさん
ありがとうございます。 実際にブラウザから入れてみて パケットキャプチャ(wireshark)で比べてみたのですが、multipartになってしまうと すべてバイナリのデータになってしまっているので比較がとても難しいのです。 サーバ側の仕様がわからないのもあるのですが、 同じようなコードで他のサイトでもアップができないので 何か手がかりがあればと思っています。 |
|
投稿日時: 2008-11-21 16:57
フォームの内容を考えると下記あたりを試したほうがいいと思って
やってみましたが、すべて結果はダメでした。 APIドキュメントのサンプルでは 1のパターンでやる、となっていたのですが、 なにかほかにまずいところがある、ということなのか、と思っています。 // 1 // new FilePart(file.getName(), file), // 2 // new FilePart("userfile", file), // 3 // new StringPart("userfile", file.getName()), // new FilePart(file.getName(), file), // 4 // new FilePart(file.getName(), file), // new StringPart("userfile", file.getName()), // 5 // new FilePart("userfile", file), // new StringPart(file.getName(), file.getName()), // 6 // new StringPart(file.getName(), file.getName()), // new FilePart("userfile", file), |
|
投稿日時: 2008-11-22 20:48
自己解決しました。
JMeterでシナリオを作成して確認したところ // 2 new FilePart("userfile", file) が、正しかったです。 ファイルのアップロードはサーバの応答が302になっており そのリダイレクト先に飛ぶことによって ファイルのアップロードが完了するものでした。 |
1