servlet+jspで実装されたファイルアップロード
まずjspページを2つ、uploadを1つ書きます.jspはクライアントが発行するフォームを記述するために使用され、1つはresultである.jspはユーザに結果を出力し,サーバ側プログラムserveltを記述するためにdoPostメソッドを書き換えるだけでよい.
upload.jsp
result.jsp
UploadServlet.java
upload.jsp
<body>
<form action="/MyStructs2/UploadServlet" type="post" method="post" enctype="multipart/form-data">
username:<input type="text" name="username"><br>
password: <input type="password" name="password"><br>
file1 <input type="file" name=file1><br>
file2 <input type="file" name=file2><br>
<input type="submit" value="submit">
</form>
</body>
result.jsp
<body>
username:${requestScope.username}<br>
password:${requestScope.password }<br>
file1: ${requestScope.file1}<br>
file2:${requestScope.file2 }<br>
</body>
UploadServlet.java
DiskFileItemFactory factory=new DiskFileItemFactory();
String path=request.getRealPath("/upload");
factory.setRepository(new File(path));
factory.setSizeThreshold(1024*1024);
ServletFileUpload upload=new ServletFileUpload(factory);
try {
List<FileItem> list=upload.parseRequest(request);
for(FileItem item:list)
{
if(item.isFormField())//
{
String name=item.getFieldName();
String value=item.getString();
request.setAttribute(name, value);
}
else//
{
String name=item.getFieldName();//
String value=item.getName();//
int start=value.lastIndexOf("\\");
String fileName=value.substring(start+1); //wenjianming
request.setAttribute(name, fileName);
OutputStream os=new FileOutputStream(new File(path,fileName));
InputStream is=item.getInputStream();
byte[] buffer=new byte[400];
int length=0;
while((length=is.read(buffer))>0)
{
os.write(buffer,0,length);
}
os.close();
is.close();
}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
request.getRequestDispatcher("upload/result.jsp").forward(request,response);//