サーブレット コンテナーまたはサーバーまたはエンジンのバージョンが3.0 未満(2.5 以前など) の場合は、サードパーティのライブラリApache Commons FileUploadを利用することをお勧めします。ファイルはアップロードされたファイルの使用を暗示していましたが、ここで説明されているように、POST メソッドからアップロードされた投稿データも効果的に処理します。
バージョン 3.0 からの Servlet API は、POST-Request 内で送信された、投稿されたデータを処理するためにいくつかの呼び出しを提供します。唯一の要件は、エンティティ コンテンツの MIME タイプ エンコーディングが " multipart/form-data " であることです。
次に、次のいずれかを使用して、コンテンツの各「部分」を取得できます。
getPart(String partName) : 「partName」はマルチコンテンツ エンティティの一部の名前です。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException
{
String partName = "type"; // or "data"
Part part = request.getPart(partName);
// read your StringBody type
BufferedReader reader = new BufferedReader( new InputStreamReader(part.getInputStream()));
String line ="";
while((line=reader.readLine())!=null)
{
// do Something with a line
System.out.println(line);
}
// or with a binary Data
partName="data";
part = request.getPart(partName);
// read your FileBody data
InputStream is = part.getInputStream();
// do Something with you byte data
is.read();
// is.read(b);
// ..
}
getParts() :
getPart(partName) と同じ結果が得られますが、ここで指定されたデータは、送信されたデータのすべての部分のコレクションです。このコレクションの Part の各部分を取得するには、コレクションに対してスレッドセーフな繰り返しを使用します。
Iterator<Part> iterator = request.getParts().iterator();
Part parts = null;
while (iterator.hasNext()) {
parts = (Part) iterator.next();
//rest of the code block removed
}
}
getPart()/getParts() は Servlet 3.0 バージョンからのみ機能するため、サポートされているサーブレット コンテナーを使用するか、現在のサーブレット コンテナーをアップグレードする必要があります。3.0 をサポートする一部のサーバーまたはサーブレット コンテナー:
- トムキャット 7.0 :
- JBoss ウェブ
- 樹脂