0

ファイルのアップロードを処理しようとしています。com.oreilly.servlet.multipart.MultipartParser クラスを使用して、投稿されたデータ (cos.jar 内) を解析しています。ただし、MultipartParser のコンストラクターを呼び出すと、次の例外が発生します。

java.io.IOException: Corrupt form data: premature ending
    at com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:166)
    at com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:94)

誰もこれを見たことがありますか?私が読んだところによると、これは、探していた境界が見つかる前にデータが終了したことを意味します。どうすればこれを修正できますか?

cos.jar バージョン 1.0 を使用しています。

ありがとう!

4

2 に答える 2

1

http://www.servlets.com/cos/faq.html

これは、クライアントから送信された POST 要求の解析で問題が発生したことを示しています。この問題には多くの原因が考えられます。

  • クライアントが STOP ボタンを押した (実際には問題ではありませんが、早期終了の原因となります)
  • Web フォームのバグ
  • サーブレットのバグ
  • ウェブサーバーのバグ
  • ブラウザのバグ
  • com.oreilly.servlet ライブラリ自体のバグ

歴史的に、Web サーバーが問題の最も頻繁な原因であることが示されています。これはおそらく、非常に多くの異なるサーバーがあり、バイナリ アップロード機能をテストしているベンダーがほとんどないように見えるためです。

まず、クライアントが STOP ボタンを押していないことを確認してください。次に、このサイトの「知っておくべきサーブレットのバグ」リソースに問題が既に投稿されているかどうかを確認してください。あまり知られていない場合は、最初に知ることができます。そして、ここであなたの発見を私たちと共有することができます!

次に、提供された upload.html フォームと DemoRequestUploadServlet.java クラスを使用して、アップロードが機能するかどうかを確認します。一部の人々は、問題の原因となったフォームのバグを発見しました。この組み合わせをテストすると、そうであるかどうかがわかります。Duke Takle という 1 人のユーザーは、この例外がリダイレクトによって引き起こされていることを発見しました。私はアルバート・スミスと同じ「早すぎる結末」を経験していました。私が見つけたのは、問題が IE 5.0 に限定されていることです。私を悩ませたアプリケーションは、MultipartRequest の構築後にリダイレクトを行っていました。IE 5.0 を除いて、この構築はうまくいったように見えますが、ブラウザは再度リクエストを作成しようとしましたが、その時までに ServletInputStream は空でした。リダイレクトする代わりに、必要な応答を単純に書き込むようにアプリケーションを変更しました。この問題は、Tomcat 4.0 および Weblogic 6.1 で説明されているように確認され、修正されました。他のユーザーは、multipartRequest.getParameter() の代わりに request.getParameter() を呼び出すサーブレットの処理にバグを発見しました。一部のサーバーは、getParameter() が呼び出されたときに入力ストリームを誤って読み取り、「予期しない部分の終了」を引き起こしました。

于 2009-02-27T18:36:20.533 に答える