フォームに画像を追加する方法を探していたところ、これらのコードが見つかりました。このコードを統合しているときに、フォームの送信時に投稿されるフォームに他のフィールドがあるため、失敗しました。
たとえば、ファイルと一緒にフィールドLastnameを投稿し、同じサーブレットを使用してそれを取得する方法(サーブレット内のコードのブロックで姓を取得する方法)を示すのを手伝っていただけませんか。
Apache Commons FileUploadとServlet 3.0を混在させています@MultipartConfig
。これら 2 つは、multipart/form-data
リクエストを解析するためのまったく異なる方法です。HTTP 要求は 1 回だけ解析できます。したがって、これらの 2 つの方法のいずれかが事前に解析済みである場合、もう一方の方法はそれを解析できなくなり、null/空のデータになってしまいます。
両方の方法ではなく、いずれかの方法でリクエストを解析する必要があります。multipart/form-data
Apache Commons FileUpload は、サーブレット 3.0 が導入される (2009 年 12 月) 以前は、リクエストを解析するための「事実上の」標準でした。しかし、サーブレット 3.0 以降、Apache Commons FileUpload を不要にする新しい@MultipartConfig
アノテーションと新しいメソッドがあります。request.getPart()
Apache Commons FileUpload を使用する場合は、Servlet 3.0とすべての行を削除し、代わりに から「通常の」リクエスト パラメータを抽出する必要があります。@MultipartConfig
request.getParameter()
List items
Servlet 3.0 を使用する@MultipartConfig
場合は、Apache Commons FileUpload に関連するすべてのコードを削除request.getPart()
し、代わりにアップロードされたファイルを取得するために使用する必要があります。
質問は少し紛らわしいですが、サーブレットで apache commons fileupload ライブラリを使用し、このようなことを行って画像ファイルのアップロードを取得します。
DiskFileItemFactory fileItemFactory = new DiskFileItemFactory ();
ServletFileUpload uploadHandler = new ServletFileUpload(fileItemFactory);
try {
/*
* Parse the request
*/
List items = uploadHandler.parseRequest(request);
Iterator itr = items.iterator();
while(itr.hasNext()) {
FileItem item = (FileItem) itr.next();
/*
* Handle Form Fields.
*/
if(item.isFormField()) {
//do stuff here if the item currently is not a file upload
}
else {
//DO stuff here to handle the file upload
}