文件上传是很多项目都碰着的需求,Struts2中也带有文件上传成果,但它是操作的java规模的其他 俩个常用的文件上传的项目:Common- FileUpload和COS,在相识Struts2之前让我们相识下奈何利用 Common-FileUpload来实现文件上传以及文件上传实现进程中应该留意的问题。
在Common- FileUpload中,它把从客户端提交过来的表单封装成一个个FileItem工具,这也是它实现文件上传成果 的焦点类。另一个很重要的类就是FileUploadBase,他的成果就是理会请求(request),如举办上传文 件巨细验证,请求范例验证(文件上传的enctype要配置成multipart/form-data)等。我们常常用到它 的子类ServletFileUpload。在FileUploadBase理会 request的进程中会将文件生存到内存,假如文件大 小大于我们配置的缓存的巨细,它将把文件的其他内容生存到一个姑且目次,当我们对FileItem 工具实 现正真上传时会从内存区或姑且目次将文件生存到正真的上传目次。而我们要做的就是举办简朴的设置 ,可以用很少的代码就可以实现文件上传,而不消直接与IO流打交道。首先将文件上传进程中应留意的 处所相识下:
1.request请求的要领必然要是POST:method="post"
2.request请求的范例 必然要是multipart/form-data: enctype="multipart/form-data"
3.在对DiskFileItemFacotry 配置进程中repository参数代表文件生存的姑且目次,假如不配置,系统将以System.getProperty ("java.io.tmpdir")代表的目次作为姑且目次。
4.DiskFileItemFacotry中的sizeThreshold参数 代表生存到内存的巨细,假如当个上传文件的巨细小于这个值,则这个文件会临时生存到内存中。假如 大于这个值,则多的部门会生存到姑且目次中。单元为B。
5.ServletFileUpload中的sizeMax参 数是代表上传文件的总巨细,单元为B
6.要对FileItem举办上传操纵,首先要判定isFormField() 为false,因为系统将每个表单项理会成一个FileItem,这个中也包罗不是文件上传的表单项。所以要判 断是否为文件上传表单项。
下面用Servlet简朴的实现文件上传:
upload.jsp
Java代码
<body>
<form method="post" id="uploadForm" action="UploadServlet" enctype="multipart/form-data" >
<table style="border: 1px solid;" align="center">
<thead>
<tr>
<td style="text-align: center" colspan="2">文件上传</td>
</tr>
</thead>
<tbody>
<tr>
<td>用户 名:</td>
<td><input type="text" name="user.username"></input></td>
</tr>
<tr>
<td>暗码:</td>
<td><input type="text" name="user.password"></input></td>
</tr>
<tr>
<td colspan="2">
<input type="file" name="file1"/>
</td>
</tr>
<tr>
<td colspan="2">
<input type="file" name="file2"/>
</td>
</tr>
<tr>
<td colspan="2">
<input type="file" name="file3"/>
</td>
</tr>
<tr>
<td><input type="button" value="Login" id="upload"/></td>
<td><input type="button" value="Cancel" id="cancelUpload"/></td>
</tr>
</tbody>
</table>
</form>
</body>
UploadServlet
Java代码
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
try {
DiskFileItemFactory factory = new DiskFileItemFactory();
// 配置姑且缓存巨细,文件大于这个值的部弟子存到姑且目次
factory.setSizeThreshold(1024 * 128);
//配置文件生存姑且目次
factory.setRepository(new File(
"C:\\Documents and Settings\\bond\\temp"));
ServletFileUpload upload = new ServletFileUpload(factory);
// 配置上传内容巨细
upload.setSizeMax(1024 * 1024*512);
List fileItems = upload.parseRequest(request);
for (FileItem fi : fileItems) {
if (! fi.isFormField()) {
fi
.write(new File("D:\\bond\\upload", fi
.getName ()));
}
}
request.getRequestDispatcher("success.jsp").forward(request,
response);
} catch (Exception e) {
e.printStackTrace();
request.getRequestDispatcher("failure.jsp").forward(request,
response);
}