标签:return header utils jar ade text 检查 tty 文件下载
1.文件上传 1.修改表单的enctype: <form action="" method="post" enctype="multipart/form-data">
修改后servlet就不能通过req.getParameter("参数名")接受请求参数了
2.导入jar包:
commons-fileupload-1.2.2.jar
commons-io-1.4.jar
3.检查method和contentType
boolean isMultipart=ServletFileUpload.isMultipartContent(req);
if(!isMultipart){
return;
}
4.创建处理FileItem的工厂对象
FileItemFactory factory=new DiskFileItemFactory();
创建处理文件上传的处理器对象
ServletFileUpload upload=new ServletFileUpload(factory);
解析请求对象
List<FileItem> items=upload.parseRequest(req);
for(FileItem fileItem:items){
String fieldName=fileItem.getFiledName();
if(fileItem.isFormField()){
String fileName=fileItem.getString("utf-8");
}else{
String fileName=fileItem.getName();
String contentType=fileItem.getContentType();
String realPath=super.getServltContext().getRealPath("/upload");
fileItem.write(new File(realPath+"/"+fileName));
}
}
5.文件名处理
使用UUID当做文件名称
String uuid=UUID.randomUUID().toString();
String extension=FilenameUtils.getExtension(fileName);
fileName=uuid+"."extension;
6.缓存大小和临时目录
设置缓存大小:
factory.setSizeThreshold(500*1024);
设置临时目录:
factory.setRepository(new File(""));
2.使用注解上传文件
@MultipartConfig
可以通过req.getParamter()接受参数
接受上传文件
Part part=req.getPart("");
part.write(realPath+"/"+name);
3.文件下载
接受请求参数:
String fileName=req.getParameter("fileName");
fileName=new String(fileName.getBytes("ISO-8859-1"),"utf-8");
找到资源的位置,读取到内存,响应给浏览器:
String realPath=super.getServletContext().getRealPath("");
String filePath=realPath+"\\"+fileName;
ServletOutputStream out=resp.getOutputStream();
//设置响应头
resp.setContenType("application/x-msdownload");
//获取请求头信息Use-Agent
String userAgent=req.getHeader("User-Agent");
if(userAgent.contain("MSIE")){
//IE
fileName=URLEncoder.encode(fileName,"utf-8");
}else{
//W3C
fileName=new String(fileName.getBytes("utf-8"),"ISO-8859-1");
}
//设置下载的文件名称
resp.setHeader("Content-Disposition","attachment;fileName="+fileName);
//将数据响应到浏览器
Files.copy(Paths.get(filePath),out);
标签:return header utils jar ade text 检查 tty 文件下载
原文地址:http://blog.51cto.com/10913595/2071340