文件下载实例与详解

2022-08-02,,,

举例抛现

实现 

文件名中文问题


 

举例抛现

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

项目

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>

 

运行浏览器访问

单击图片显示

单击视频显示

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

实现 

那么我们把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);
    }
}

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

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

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

用IE浏览器访问

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

 

文件名中文问题

文件下载文件中文名问题

本文地址:https://blog.csdn.net/lgl782519197/article/details/107330080

《文件下载实例与详解.doc》

下载本文的Word格式文档,以方便收藏与打印。