multipart/form-data のデータ取得について


ファイルをアップロードするには、form タグの enctype属性 を
multipart/form-data にする必要があります。
でも、multipart/form-data にすると HttpServletRequest の
getParameter で input タグとかの値が取得できない。
でも以下の方法で取得可能らしい。



public void processFormField(HttpServletRequest request)
throws ServletException {

// ファクトリー生成
DiskFileItemFactory factory
= new DiskFileItemFactory();

// この値は適宜修正?
factory.setSizeThreshold(1426);

ServletFileUpload upload
= new ServletFileUpload(factory);

// ↓のサイズは設定しなくてもいいかも
// web.xmlで調整できる気もする
upload.setSizeMax(20 * 1024);
upload.setFileSizeMax(10 * 1024);

try {

List items = upload.parseRequest(request);

// 全フィールドに対するループ
for (Object val : items) {

FileItem item = (FileItem) val;
if (item.isFormField()) {

// type="file"以外のフィールド
processFormField(item);

} else {

// type="file"のフィールド
processFormField(item);
}
}

// ここは起こり得るExceptionに修正かな
} catch (Exception e) {

// エラー処理
throw new ServletException(e);
}

}

// このメソッドはフォームにバインディングするなり
// なんなり好きなように実装すべし!
private void processFormField(FileItem item)
throws ServletException {

System.out.println(item.getFieldName());
try {

System.out.println(item.getString("Windows-31j"));

} catch (Exception e) {

throw new ServletException(e);
}
}



0 コメント: