您的位置:首页 > 编程语言 > Java开发

JAVAWeb文件下载功能

2020-04-01 19:04 861 查看

个人博客地址https://nfreak-man.cn

  1. 编写html页面,编辑超链接 href 属性,指向Servlet并传递要下载的文件名及格式

  2. Servlet:*获取文件名称

    ​ *使用字节输入流加载文件进内存

    ​ *指定 response 的响应头:content-disposition:attachmement;filename=xxx

    ​ *将数据写出到 response 输出流

html a标签格式

href="/day15/downloadServlet?filename=鬼刀.png"

Servlet

@WebServlet("/downloadServlet")
public class DownloadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取请求参数,文件名称
String filename = request.getParameter("filename");
//使用字节输入流加载文件进内存
//找到文件的服务器路径
ServletContext servletContext = this.getServletContext();
String realPath = servletContext.getRealPath("/img/" + filename);
//用字节流关联
FileInputStream fis = new FileInputStream(realPath);

//设置response的响应头
//设置响应头类型:content-type
String mimeType = servletContext.getMimeType(filename);
response.setHeader("content-type",mimeType);
//设置响应头打开方式:content-disposition
//解决中文文件名问题
//获取user-agent请求头
String agent = request.getHeader("user-agent");
//使用工具类方法编码文件名即可
String fileName = DownLoadUtils.getFileName(agent, filename);
response.setHeader("content-disposition","attachment;filename="+fileName);

//将输入流的数据写出到输出流中
ServletOutputStream sos = response.getOutputStream();
byte[] buff = new byte[1024 * 8];
int len = 0;
while ((len = fis.read(buff))!=-1){
sos.write(buff,0,len);
}
fis.close();
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}

注:解决中文文件名下载不能正常显示问题,需要用到 DownLoadUtils 类获取浏览器编码方式,百度搜索下载即可。

  • 点赞
  • 收藏
  • 分享
  • 文章举报
William_GJIN 发布了21 篇原创文章 · 获赞 0 · 访问量 457 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: