ファイルをアップロードするには、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 コメント:
コメントを投稿