* 单个文件大小限制
> sfu.setFileSizeMax(100*1024):限制单个文件大小为100KB
> 上面的方法调用,必须在解析开始之前调用!
> 如果上传的文件超出限制,在parseRequest()方法执行时,会抛出异常!FileUploadBase.FileSizeLimitExceededException
* 整个请求所有数据大小限制
> sfu.setSizeMax(1024 * 1024);//限制整个表单大小为1M
> sfu.setFileSizeMax(100*1024):限制单个文件大小为100KB
> 上面的方法调用,必须在解析开始之前调用!
> 如果上传的文件超出限制,在parseRequest()方法执行时,会抛出异常!FileUploadBase.FileSizeLimitExceededException
* 整个请求所有数据大小限制
> sfu.setSizeMax(1024 * 1024);//限制整个表单大小为1M
> 这个方法也是必须在parseRequest()方法之前调用
> 如果上传的文件超出限制,在parseRequest()方法执行时,会抛出异常!FileUploadBase.SizeLimitExceededException
package servlet;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadBase;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadServlet3 extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*
* 创建工厂
*/
DiskFileItemFactory factory=new DiskFileItemFactory();
/*
* 创建解析器
*/
ServletFileUpload sfu=new ServletFileUpload(factory);
//限制单个文件大小为100KB
sfu.setFileSizeMax(100*1024);
//限制整个表单大小为1M
sfu.setSizeMax(1024*1024);
/*
* 使用解析器来解析request,得到FileItem集合
*/
try {
List <FileItem> fileItem=sfu.parseRequest(request);
FileItem fi=fileItem.get(1);
///////////////////////////
/*
* 1、得到文件保存的路径
*/
String root=this.getServletContext().getRealPath("/WEB-INF/files/");
/*
* 2. 生成二层目录
* 1). 得到文件名称
* 2). 得到hashCode
* 3). 转换成16进制
* 4). 获取前二个字符用来生成目录
*/
//1.得到文件名称
String filename=fi.getName();
/*
* 处理文件名的绝对路径
*/
int index=filename.lastIndexOf("//");
if(index!=-1){
filename=filename.substring(index+1);
}
/*
* 为了避免文件同名
*/
filename=CommonUtils.uuid()+"_"+filename;
//2.得到hashcode
int hashcode=filename.hashCode();
//3.转换成十六进制
String hex=Integer.toHexString(hashcode);
//4. 获取hex的前两个字母,与root连接在一起,生成一个完整的路径
File dirFile=new File(root,hex.charAt(0)+"/"+hex.charAt(1));
dirFile.mkdirs(); //创建目录链
//5.创建目录文件
File desFile=new File(dirFile,filename);
try {
fi.write(desFile);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
if (e instanceof FileUploadBase.FileSizeLimitExceededException){
request.setAttribute("msg", "您上传的文件超出了100KB!");
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
}
}
}