无论是文件的上传还是下载,都是IO操作,无非是一边读取文件,一边写入文件。
文件的上传不一样是他无法通过GET方式提交,所以只能由表单使用POST方式提交,并且申明:
1 2
| <form action="${pageContext.servletContext.contextPath}/UploadServlet" method="post" enctype="multipart/form-data">
|
我们有非常棒的第三方工具,导入两个jar包。
1:获取要使用的对象
1 2 3 4 5 6
| DiskFileItemFactory factory=new DiskFileItemFactory();
ServletFileUpload upload=new ServletFileUpload(factory);
List<FileItem> fileItems = upload.parseRequest(request);
|
2:使用对象
1 2 3 4 5 6 7 8 9 10 11 12
| for(FileItem item :fileItems) { if(item.isFormField()){ System.out.println(item.getFieldName()+"提交的数据是:"+item.getString()); }else { String savePath=getServletContext().getRealPath("/WEB-INF/upload/"+item.getName()); File os=new File(savePath); item.write(os); }
|
3:其他的常见问题解决
文件上传大小限制:
1 2
| upload.setFileSizeMax(4*1024*1024);
|
中文乱码:
1 2 3 4
| response.setCharacterEncoding("utf-8");
fileItem.getString("utf-8")
|
重名问题:
文件格式问题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
String fileFullName = item.getName();
String lastName = fileFullName.substring(fileFullName.lastIndexOf("."));
String[] rightLastName={"jpg","jpeg","gif","bmp"};
boolean isOk=false; for(String name:rightLastName){ if(fileFullName.toLowerCase().endsWith(name)){ isOk=true; } }
|