​举例抛现​

​实现 ​

​文件名中文问题​




举例抛现



还是先来个页面吧,里面有2个超链接,一个是图片路径,一个是视频路径



项目

文件下载实例与详解_java



file.html代码

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>文件下载</title> </head> <body> <a href="/file/2.jpg">图片</a> <a href="/file/aa.mp4">视频</a> </body> </html>




运行浏览器访问

文件下载实例与详解_html_02



单击图片显示

文件下载实例与详解_谷歌浏览器_03



单击视频显示

文件下载实例与详解_html_04



所以是单击图片的时候,能被高级浏览器解析,直接显示,单击视频的时候提示下载,现在想要的效果是无论是图片还是视频,我们多要弹框提示下载



实现 



那么我们把file.html页面修改一下,不直接访问文件,而是调到Servlet层


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件下载</title>
</head>
<body>
<a href="/bServlet/dowmloadFile1?fileName=2.jpg">图片</a>
<a href="/bServlet/dowmloadFile1?fileName=aa.mp4">视频</a>
</body>
</html>


Servlet层dowmloadFile1的代码


package com.lingaolu.download;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.*;

/**
* @author 林高禄
* @create 2020-07-14-9:11
*/
@WebServlet("/dowmloadFile1")
public class DowmloadFile1 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// 获取文件名
String fileName = request.getParameter("fileName");
// 获取文件的MIME类型
ServletContext servletContext = this.getServletContext();
String mimeType = servletContext.getMimeType(fileName);
// 获取文件的真实路径
String realPath = servletContext.getRealPath("/file/" + fileName);
// 将文件读入内存
FileInputStream fis = new FileInputStream(realPath);
// 设置相应头类型
response.setHeader("content-type",mimeType);
response.setHeader("content-disposition","attachment;filename="+fileName);
// 将文件写出浏览器
ServletOutputStream outputStream = response.getOutputStream();
int len;
byte[] by = new byte[1024*8];
while((len = fis.read(by)) != -1){
outputStream.write(by,0,len);
}
fis.close();
}

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


启动访问,谷歌浏览器访问

文件下载实例与详解_java_05



单击图片,会下载,因为谷歌浏览器设置自动下载

文件下载实例与详解_文件下载_06



单击视频,会提示下载,因为我谷歌浏览器设置扩展程序关联迅雷

文件下载实例与详解_文件下载_07



用IE浏览器访问

文件下载实例与详解_谷歌浏览器_08



无论单击图片还是视频,都会提示下载,因为IE浏览器我没有设置

文件下载实例与详解_谷歌浏览器_09


文件下载实例与详解_谷歌浏览器_10



文件名中文问题



​文件下载文件中文名问题​