JavaWeb实现文件下载及在文件下载时候的一些坑

JavaWeb实现文件下载及在文件下载时候的一些坑加粗样式****

源码在文章底部

因为IE 谷歌 火狐使用的解码编码方式不同 所以在下载的时候需要分别解析,以下是处理浏览器编码的问题
在这里插入图片描述
这里需要和你项目里面真实的文件名称一样,包括后缀名在这里插入图片描述在者就是路径问题
在这里插入图片描述
附上源码

import cn.hutool.core.codec.Base64Encoder;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.IOUtils;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.List;

public class DownloadServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      //  因为谷歌  IE  火狐使用的解码编码方式不同  还需要分开来进行操作
        String ua = req.getHeader("User-Agent");
        System.out.println(ua+"___________________");
        //USer-Agent 中有对应的浏览器名称
        String str = "";
        if(!ua.contains("Firefox")){
            str = "attachment; fileName="+"=?utf-8?B?"+new Base64Encoder().encode("轻大logo","UTF-8");
            System.out.println(str+"11");
        }else {
            str = "attachment; fileName="+ URLEncoder.encode("轻大logo","UTF-8");
            System.out.println(123);
        }


        //获取要下载的文件名
        String downloadName = "logo.jpg";
        //读取要下载的文件内容(通过servletContext对象获取)
        ServletContext servletContext = getServletContext();
        //获取要下载的文件类型
        String mimeType = servletContext.getMimeType("/static/img/"+downloadName);
        //System.out.println(mimeType);

        //告诉客户端返回的数据类型

        resp.setContentType(mimeType);
        //Content-Disposition表示下载的文件应该如何处理, attachment表示下载  后面表示名字,可以和源文件名字不同,可以自定义
        resp.setHeader("Content-Disposition", "attachment; filename=" + downloadName);

        InputStream inputStream = servletContext.getResourceAsStream("/static/img/"+downloadName);
        //获取需要下载文件的流

        OutputStream outputStream = resp.getOutputStream();
        //获取一个输出流
        //使用jar包中的方法,将获得的输入流,拷贝到输出流中
        IOUtils.copy(inputStream,outputStream);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WeChat098

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值