欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

文件下载实例与详解

程序员文章站 2022-04-15 23:40:15
举例抛现还是先来个页面吧,里面有2个超链接,一个是图片路径,一个是视频路径项目file.html代码 文件下载 图片....

举例抛现

实现 

文件名中文问题


 

举例抛现

还是先来个页面吧,里面有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