Servlet之文件的上传与下载

文件上传和文件下载是我们学JAVA Web时必不可少的模块。今天我们探讨下这个问题

文件上传:

request.setCharacterEncoding("utf-8");//设置请求乱码

response.setContentType("text/html;charset=utf-8");//设置响应乱码,先把两个乱码问题解决。防止乱码

DiskFileItemFactory fatory=new DiskFileItemFactory();//建立一个DiskFileItemFactory
ServletFileUpload fileupload = new ServletFileUpload(fatory);//使用ServletFileUpload调用这个工厂
// fileupload.setFileSizeMax(1024*60);//设置文件单个大小不超过60k
fileupload.setSizeMax(1024*300);//设置文件总大小不超过300k
ServletContext servletContext = request.getServletContext();
String realPath = servletContext.getRealPath("/upfile");////获取指定文件夹的路径(新建一个服务器上的upfile的文件夹)
File file=new File(realPath);//在这个路径下声明file
if(file.exists()){
file.mkdirs();
}//文件存在则遍历
try {
List<FileItem> filelist = fileupload.parseRequest(request);
for(FileItem item:filelist){
if(item.isFormField()){
String name=item.getFieldName();
}else{
//不上传空文件
long size = item.getSize();
if(size ==0){//文件为空,跳过此次判断,不进行上传
continue;
}
//使用UUID唯一标识文件名字,使图片不被覆盖。
String name = item.getName();
String prefix = UUID.randomUUID().toString();
prefix = prefix.replace("-","");
String fileName = prefix+"_"+name;
try {
item.write(new File(realPath+"\"+fileName));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
} catch(FileSizeLimitExceededException e){
System.out.println("单个文件超过60kb");
}catch(SizeLimitExceededException e){
System.out.println("总文件超过300kb");
}catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

文件下载:

ServletContext servletContext = request.getServletContext();
String fileName="童话镇.mp3";
String path = servletContext.getRealPath("/WEB-INF/"+fileName);//得到文件的路径
File file=new File(path);
InputStream in=new FileInputStream(file);//将文件放在输入流中
//fileName=new String(fileName.getBytes("gbk"),"iso8859-1");
fileName = java.net.URLEncoder.encode(fileName,"utf-8");//防止中文乱码,下载后不能播放和观看
response.setHeader("Content-Disposition", "attachment;filename="+fileName);
ServletOutputStream out = response.getOutputStream();
IOUtils.copy(in, out);//调用IOUtils方法将输入流转为输出流
in.close();//关闭输入流

原文地址:https://www.cnblogs.com/xuningchuanblogs/p/7441431.html