※ ChatGPTを利用し、要約された質問です(原文:ファイルアップロードにて)
JSPでのファイルアップロードとデータ受け取りに関する問題
このQ&Aのポイント
ファイルアップロードにてJSPで入力したFORMデータと画像ファイルのアップロードをひとつのサブミットボタンで同時にリクエストでサーブレットへ送るような会員登録ページのプログラムを作っているのですが、サーブレット側で受け取ったデータが文字化けしてしまいます(下のソース中のparaValueの部分)。また受け取るファイルを画像ファイル(gifかjpeg)をかどうか判別してオッケーなら指定の場所へ登録し違うものなら削除するような機能も考えています。
(サブミットを実行する前にjavascriptなどで判別が出来ればいいのですが)誰か知恵を貸してください。
フォームからのデータと画像ファイルのアップロードを同時に行う会員登録ページを作成しているが、サーブレットで受け取ったデータが文字化けしてしまい、画像ファイルの形式判定にも困っている。JavaScriptなどで事前に判定できる方法を知りたい。
JSPで入力したFORMデータと画像ファイルのアップロードをひとつのサブミットボタンで同時に
リクエストでサーブレットへ送るような会員登録ページのプログラムを作っているのですが、
サーブレット側で受け取ったデータが文字化けしてしまいます(下のソース中のparaValueの部分)。また受け取るファイルを画像ファイル(gifかjpeg)を
かどうか判別してオッケーなら指定の場所へ登録し違うものなら削除するような機能も考えています。
(サブミットを実行する前にjavascriptなどで判別が出来ればいいのですが)誰か知恵を貸してください。
下がソースです。
<!-- jsp ---------------------------------------------->
<%@ page contentType="text/html;charset=Shift_JIS" %>
<html>
<head>
<title>会員登録</title>
</head>
<body>
<form method="POST" enctype="multipart/form-data" action="UploadServlet">
<table border="1">
<tr>
<td align="left">
ユーザーの画像:
<input type="file" name="fl" size="40" />
</td>
</tr>
<tr>
<td align="left">
ユーザーの名前:
<input type="text" name="username" size="40">
</td>
</tr>
<tr>
<td align="center">
<input type="submit" value="アップロード" />
</td>
</tr>
</table>
</form>
</body>
</html>
<!-- servlet ------------------------------------------->
public class UploadServlet extends HttpServlet {
public void doPost(HttpServletRequest req,HttpServletResponse res)
throws ServletException, IOException {
request.setCaracterEncoding("Shift_JIS");
//(1)アップロードファイルを格納するPATHを取得
String path = getServletContext().getRealPath("files");
//(2)ServletFileUploadオブジェクトを生成
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
//(3)アップロードする際の基準値を設定
factory.setSizeThreshold(1024);
upload.setSizeMax(-1);
upload.setHeaderEncoding("Shift_JIS");
try {
//(4)ファイルデータ(FileItemオブジェクト)を取得し、
// Listオブジェクトとして返す
List list = upload.parseRequest(req);
//(5)ファイルデータ(FileItemオブジェクト)を順に処理
Iterator iterator = list.iterator();
while(iterator.hasNext()){
FileItem fItem = (FileItem)iterator.next();
//(6)ファイルデータの場合、if内を実行
if(!(fItem.isFormField())){
//(7)ファイルデータのファイル名(PATH名含む)を取得
String fileName = fItem.getName();
if((fileName != null) && (!fileName.equals(""))){
//(8)PATH名を除くファイル名のみを取得
fileName=(new File(fileName)).getName();
//(9)ファイルデータを指定されたファイルに書き出し
fItem.write(new File(path + "/" + fileName));
}
}else {
String paraName=item.getFieldName();
String paraValue=item.getString();
System.out.println(paraName);
System.out.println(paraValue);
}
}
}catch (FileUploadException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
}
}
お礼
回答ありがとうございます。 指摘のとおりHTMLでも設定してみましたがだめでした。 でも何とか自己解決しました。 javadocをしっかり読んだらエンコードを指定できるメソッドが見つかりました。 どうやらUnicodeからStringをつくる時に失敗していたようです。