文件上传与文件下载
servlet文件上传
<!--文件上传-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
package com.study.upload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
@WebServlet("/upload")
public class UploadServletWay2 extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//上传文件的存放路径
String realPath = req.getServletContext().getRealPath("/upload");
File file=new File(realPath);
//不存在就创建
if(!file.exists() && !file.isDirectory()){
file.mkdir();
}
//判断是否是文件上传表单
Boolean isMultipart= ServletFileUpload.isMultipartContent(req);
if(!isMultipart){
//不是返回
return ;
}
//文件上传结果
String message="";
try{
DiskFileItemFactory diskFileItemFactory=new DiskFileItemFactory();
ServletFileUpload fileUpload=new ServletFileUpload(diskFileItemFactory);
List<FileItem> fileItems = fileUpload.parseRequest(req);
for(FileItem fileItem : fileItems){
//获取表单空间name属性的值
String name = fileItem.getFieldName();
//判断是上传文件还是普通输入框
if(fileItem.isFormField()){
//拿到name属性的值
String value = fileItem.getString();
System.out.println(name+"=="+value);
}else{ //上传文件
String fileName = fileItem.getName();
System.out.println(name+"=="+fileName);
//获取上传文件后缀
String substring = fileName.substring(fileName.lastIndexOf(".") + 1);
//为上传文件创建一个新的唯一名称
String newFileName = UUID.randomUUID().toString() + "." + substring;
fileItem.write(new File(file,newFileName));
message="上传文件成功";
//删除文件上传生成的临时文件
fileItem.delete();
}
}
}catch (Exception e){
message="文件上传失败";
e.printStackTrace();
}
req.setAttribute("msg",message);
req.getRequestDispatcher("fileuploadresult.jsp").forward(req,resp);
}
}
servlet文件下载
package com.study.down;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Paths;
/**
* 文件下载
*/
@WebServlet("/down")
public class DownServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//拿到下载文件名
String filename = req.getParameter("filename");
filename=new String(filename.getBytes("ISO-8859-1"),"utf-8");
//从服务器中找到绝对路径
String realPath = req.getServletContext().getRealPath("/imag/" + filename);
System.out.println("下载文件地址"+realPath);
//设置浏览器不弹出文件而是下载框
resp.setContentType("application/x-msdownload");
filename= URLEncoder.encode(filename,"UTF-8");
//让浏览器能够支持下载文件
resp.setHeader("content-Disposition","attachment;filename="+filename);
Files.copy(Paths.get(realPath),resp.getOutputStream());
}
}