原生的servlet文件下载实现
程序员文章站
2022-06-02 13:53:43
...
文件下载是很多项目中比不可少的一个需求,下面用最原生的servlet
来实现文件的下载功能。
记录一下实现的代码,方便以后忘记的时候再来温习一下~
package com.service;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
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.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;
@WebServlet("/DownFile")
public class DownFile extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 查找文件的路径
// servletContext代表整个应用
ServletContext servletContext = getServletContext();
// 获取资源位文件在(服务器)磁盘目录
String realPath = servletContext.getRealPath("img/上课时间安排.png");
//截取文件名,为了客户下载资源的时候有一个文件名
//File.separator表示/,不同操作系统不一样
String fileName = realPath.substring(realPath.lastIndexOf(File.separator) + 1);
//有的时候从服务器上下在一个带有中文的文件的话,就会出现乱码,需要解决乱码问题
fileName= URLEncoder.encode(fileName,"utf-8");
//将其读入到输入流中
FileInputStream fileInputStream = new FileInputStream(realPath);
//服务器要告诉浏览器需要下载资源问价了
resp.setHeader("content-disposition", "attachment;filename=" + fileName);
//设置下载的文件夹,就是截取文件后缀名
String mimeType = servletContext.getMimeType(fileName);
resp.setContentType(mimeType);
//通过输出流给客户端
ServletOutputStream outputStream = resp.getOutputStream();
byte[] temp = new byte[1024];
int len = 0;
while ((len = fileInputStream.read(temp)) != -1) {
outputStream.write(temp, 0, len);
outputStream.flush();
}
}
}
测试:下载部署在tomcat
下面的javaWeb
项目下面的background.jpg
图片
servlet3.0
以下的需要加入下面的映射
<servlet>
<servlet-name>DownFile</servlet-name>
<servlet-class>com.service.DownFile</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DownFile</servlet-name>
<url-pattern>/DownFile</url-pattern>
</servlet-mapping>
运行结果:
成功!!!!
下一篇: JSP与Servlet文件上传和下载