springmvc-day04

目录:

  第一章 文件下载

    1.1 commons-io.jar工具包

    1.2 HttpHeaders类

    1.3 ResponseEntity类

    1.4 处理下载文件名中文乱码

    案例演示

第一章 文件下载

  概述:文件下载功能比较简单,通常不需要使用第三方插件,直接使用输入输出流实现功能即可。

通常情况下使用链接地址指向要下载的文件,浏览器会尽可能解析对应的文件,只要是能够在浏览器窗口展示,就会直接显示,而不是提示下载。

  1.1 commons-io.jar工具包

    (1) IOUtils类

      void copy(InputStream input, OutputStream output):文件复制。

    (2) FileUtils类

      writeStringToFile(Flie file, String data, String encoding):将指定的数据写入到文件中。

      readFileToByteArray(File file):将指定文件转换成字符数组。

  1.2 HttpHeaders类

    set(String headname, String headvalue):设置响应头信息,设置文件MIME类型(媒体类型)

    setContentDispositionFormData(String name,String filename):设置以附件的形式处理文件

  1.3 ResponseEntity类

    ResponseEntity<byte[]>(byte[] byte,HttpHeaders httpHeaders,HttpStatus status):ResponseEntity构造方法,参数:字节数组、响应头、状态码

  1.4 处理下载文件名中文乱码

    Firefox浏览器下载中文文件的时候采用的是Base64的编码.

    IE浏览器,谷歌浏览器等,下载中文文件的时候采用的URL的编码.

 

  案例演示:

    前端页面:

 

<a href="downLoad/downLoadFile.do?filename=1.docx">1.docx</a><br>
<a href="downLoad/downLoadFile.do?filename=1.jpg">1.jpg</a><br>
<a href="downLoad/downLoadFile.do?filename=1.mp4">1.mp4</a><br>
<a href="downLoad/downLoadFile.do?filename=1.txt">1.txt</a><br>
<a href="downLoad/downLoadFile.do?filename=1.zip">1.zip</a><br>
<a href="downLoad/downLoadFile.do?filename=你好.jpg">你好.jpg</a><br>

 

 

 

    文件下载:

@Autowired
    private ServletContext content;
    @RequestMapping("downLoadFile")
    public ResponseEntity<byte[]> downLoad(String filename, @RequestHeader("User-Agent") String agent) throws IOException {
        String realPath = content.getRealPath("download"+File.separator+filename);
        System.out.println("realPath = " + realPath);
        filename = getFilename(filename,agent);
        HttpHeaders httpHeaders = new HttpHeaders();
        //设置响应头:以附件的形式处理文件
        httpHeaders.setContentDispositionFormData("attachment",filename);
        //设置响应头:设置文件的MIME类型(媒体类型)
        httpHeaders.set("contentType",content.getMimeType(filename));
        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(new File(realPath)),httpHeaders, HttpStatus.OK);
    }

 

 

    处理下载时中文乱码:

 

public String getFilename(String filename,String agent) throws UnsupportedEncodingException {
        if (agent.contains("MSIE")) {
            // IE浏览器
            filename = URLEncoder.encode(filename, "utf-8");
            filename = filename.replace("+", " ");
        } else if (agent.contains("Firefox")) {
            // 火狐浏览器
            BASE64Encoder base64Encoder = new BASE64Encoder();
            filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
        } else {
            // 其它浏览器
            filename = URLEncoder.encode(filename, "utf-8");
        }
        return filename;
    }

 

上一篇:log4j2漏洞风险临时处理方案


下一篇:第七节:HttpEntity 与 ResponseEntity