- - PR -
multipartの値が取得できない!?
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-02-19 22:34
はじめまして。
よろしくお願いします。 現在、JavaWebStartでファイルアップロードする機能を開発中です。 HttpClientを利用してmultipartのリクエストをサーバに送信しているのですが、 サーバ側でリクエストの解析がうまく行きません。 ソースとエラー内容は以下のようになっています。 [クライアント] PostMethod post = new PostMethod ("http://localhost"); File file = new File("ファイルパス"); post.setRequestHeader("Content-Type", "multipart/form-data; boundary=-------------426f756e6"); post.setRequestHeader("Accept-Language", "ja"); Part[] parts = {new FilePart(file.getName(), file)}; post.setRequestEntity(new MultipartRequestEntity(parts, post.getParams())); HttpClient httpclient = new HttpClient(); httpclient.executeMethod(post); [サーバ] Properties props = new Properties(); Session session = Session.getInstance(props); MimeMessage message = new MimeMessage(session, stream); message.addHeader("Content-Type", contentType); Object content_test = message.getContent(); Multipart multipart = (Multipart)content_test; for (int i = 0; i < multipart.getCount(); i++) { ← ◆ ここでエラー発生 // リクエストパラメータ取得処理 } [エラーメッセージ] javax.mail.MessagingException: Missing start boundary いくら検索しても目当てのものがなかなかヒットせず困っています。 どなたかご教授よろしくお願いします。 | ||||
|
投稿日時: 2007-02-19 23:13
まずサーバサイドとクライアントサイド、どちらに問題があるのか切り分けてみてはいかがでしょうか。
ブラウザで送信してみるとか、既に動作が確認できてるサーバに送信してみるとか。 | ||||
|
投稿日時: 2007-02-20 12:15
インギ様
返答ありがとうございます。 ブラウザでmultipartリクエストを送信した場合、 サーバ側では問題なく処理されます。 ログを確認したのですが、 「message.addHeader("Content-Type", contentType); 」で ヘッダに設定しているContent-Typeは、 ブラウザで設定しているのと同形式でした。 "multipart/form-data; boundary=-------------426f756e6" 問題はクライアント側でのboundaryの設定方法に あるのではないかと思っています。 | ||||
|
投稿日時: 2007-02-20 12:28
ではブラウザが出すリクエストと、JWSクライアントがだすリクエストを見比べてみてはいかがでしょう?
| ||||
|
投稿日時: 2007-02-20 12:34
JavaWebStartを使っているのならば、
扱いが面倒なmultipartを使わなくても、 POSTで自由なデータを送る事ができますよ。 サーバー側のインタフェースが決まっているなら別ですが。 ついでに、POSTならBase64をかけずにバイナリを直接送れるので、 転送量も2/3程度に削減できます。 参考までに。。 | ||||
|
投稿日時: 2007-02-20 13:22
インギ様
あしゅ様 返答ありがとうございます。 インギ様 リクエストを表示したところ ファイルを含んでいる為、バイナリ形式で表示されてしまいます。 リクエストを表示する良い手段はないでしょうか。 あしゅ様 始めはストリームを使っていたのですが ファイルサイズが32MBを超えると クライアント側でOutOfMemoryが発生してしまう為 現在の形で解決できないか試行中です。 仕様ではファイルサイズは600MBまで可能となっています。 | ||||
|
投稿日時: 2007-02-20 13:49
content-typeをわざわざ設定する必要ありますか?
そこを取ってみたらどうなりますか? | ||||
|
投稿日時: 2007-02-20 14:11
ByteArrayOutputStreamなどを使ってストリーム全体を 一時的にメモリ上に持つ構造になっていませんか? JVMの現在のデフォルトのヒープサイズは64MBなので、 その程度の容量でOutOfMemoryになってしまうでしょう。 |