servlet—上传—下载—文件
上传
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<!--请求的方式必须是post,必须包含enctype属性,值选择multipart/form-data-->
<form action="uploadServlet" method="post" enctype="multipart/form-data">
<input type="file" id="fileName" name="fileName">
<input type="submit" value="上传文件" id="uploadButton">
</form>
</body>
</html>
servlet
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.UUID;
/**
* @version 1.0
* @author: liujiahuai
* @date: 2019/8/22 0022 17:08
*/
@WebServlet(name = "UploadServlet",value = "/uploadServlet")
@MultipartConfig
public class UploadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
PrintWriter writer = response.getWriter();
// 创建part对象
Part part = request.getPart("fileName");
String contentDisposition = part.getHeader("Content-Disposition");
System.out.println("contentDisposition=="+contentDisposition);
// 动态获取服务器upload文件夹的路径
String serverPath = request.getServletContext().getRealPath("download");
System.out.println("serverPath==="+serverPath);
System.out.println("part.getContentType=="+part.getContentType());
if (part.getContentType().contains("image")){
String suffix = contentDisposition.substring(contentDisposition.lastIndexOf("=")+2,contentDisposition.length()-1);
System.out.println("suffix=="+suffix);
// 随机的生成一个32的字符串
String fileName = UUID.randomUUID()+suffix;
System.out.println("filename====:"+fileName);
// 向指定的文件夹写入文件
part.write(serverPath+"\\"+fileName);
writer.print("上传文件成功!!");
writer.print("<a href='index.jsp'>返回</a>");
}else {
writer.print("请选择正确的图片格式!!!");
}
writer.flush();
writer.close();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
下载
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>servlet方式下载</title>
</head>
<body>
<h1>通过servlet程序下载文件</h1>
<a href="downLoadServlet?fileName=学生列表-20190601095335.zip">压缩包</a>
<a href="downLoadServlet?fileName=link.jpg">图片</a>
</body>
</html>
servlet
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.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* @version 1.0
* @author: liujiahuai
* @date: 2019/8/26 0026 10:56
*/
@WebServlet(name = "DownLoadServlet",value = "/downLoadServlet")
public class DownLoadServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获得请求文件名
String fileName = request.getParameter("fileName");
System.out.println(fileName);
// 设置文件MIME类型
String mimeType = getServletContext().getMimeType(fileName);
System.out.println("mimeType=="+mimeType);
response.setContentType(mimeType);
// 设置Content-Disposition
response.setHeader("Content-Disposition", "attachment;filename="+fileName);
// 读取目标文件,通过response将目标文件写到客户端
// 获取目标文件的绝对路径
String fullFileName = getServletContext().getRealPath("/download/" + fileName);
System.out.println("fullFileName=="+fullFileName);
// 读取文件
InputStream in = new FileInputStream(fullFileName);
OutputStream out = response.getOutputStream();
// 写文件
int b;
while((b=in.read())!= -1) {
out.write(b);
}
out.close();
in.close();
}
}