准备工作
apache的开源工具common-fileupload包负责完成文件上传,其依赖于common-io包
1 2 3 4 5 6 7 8 9 10 11 12 13
| <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> </dependency>
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency>
|
使用类介绍
文件上传的注意事项:
- 为保证服务器安全,上传文件应该放在外界无法访问的目录下,比如
WEB-INF
目录下(该目录下的文件只能通过转发和重定向跳转)
- 为防止文件覆盖的现象发生,要为上传文件产生一个唯一的文件名(使用uuid或时间戳)
- 要限制上传文件的最大值
- 可以限制上传文件的类型,在收到上传文件名时,判断后缀名是否合法
使用类:
- DiskFileItemFactory:解析ServletFileUpload对象
- ServletFileUpload:负责处理上传的文件数据,并将表单中每个输入项封装成一个FileItem对象
- FileItem:表单的每个输入项都是一个FileItem对象
用法示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <html> <body> <h2>Hello World!</h2>
<%-- 通过表单上传文件 get:上传文件大小有限制 post:上传文件大小没限制 --%> <form action="${pageContext.request.contextPath}/upload.do" enctype="multipart/form-data" method="post"> 上传用户:<input type="text" name="username"><br/> <p><input type="file" name="file1"></p> <p><input type="file" name="file2"></p> <p><input type="submit"> | <input type="reset"></p> </form>
</body> </html>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| if (ServletFileUpload.isMultipartContent(req)) { FileItemFactory fileItemFactory = new DiskFileItemFactory(); ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory); try { List<FileItem> list = servletFileUpload.parseRequest(req); for (FileItem fileItem : list) { if (fileItem.isFormField()) { System.out.println(fileItem.getFieldName()); System.out.println(fileItem.getString("UTF-8")); } else { fileItem.write(new File("D:\\fileItem.getFieldName()"); } } } catch (Exception e) { System.out.println(e); } }
|