SpringMVC中文件的上传和下载(下)

文件下载

实现文件的下载

在SpringMVC中,如果要实现文件的下载大致可以分为如下两个步骤

  1. 在客户端页面使用一个文件下载的超链接,链接的href属性要指定到后台文件下载的方法以及文件名(同时你需要在文件下载目录中添加一个名称为1..jpg的文件)
<a href="${pageContext.request.contextPath}/download?fileName=1.jpg">文件下载</a>
  1. 在后台的Controller类中,使用Spring MVC提供的文件下载方法进行文件的下载,在Spring MVC中提供了一个ResponseEntity类型的对象,使用它可以很方便的地定义返回的HttpHeaders对象和HttpStatus对象,通过对着两个对象的设置,即可完成下载文件时需要的配置信息
    @RequestMapping("/down")
    public String showDownJSP(){
        return "views/Down.jsp";
    }

    @RequestMapping("/download")
    public ResponseEntity<byte[]> fileDownload(String fileName,HttpServletRequest request) throws IOException {
        //指定要下载的文件所在的路径
        String path = request.getServletContext().getRealPath("/upLoad/");
        System.out.println(path);
        //创建该文件的对象
        File file = new File(path+File.separator+fileName);
        //对文件进行编码,防止中文乱码
        fileName = this.getFilename(fileName,request);
        //设置响应头
        HttpHeaders httpHeaders = new HttpHeaders();
        //通知浏览器以下载的方式打开文件
        httpHeaders.setContentDispositionFormData("attachment",fileName);
        //定义以流的形式下载返回文件数据
        httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        //使用SpringMVC 框架的ResponseEntity对象封装返回下载数据
        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),httpHeaders, HttpStatus.OK);
    }
    public String getFilename(String fileName,HttpServletRequest request) throws UnsupportedEncodingException {
        //IE不同版本中UA出现的关键词
        String[] IEBrowserKeyWords = {"MSIE","Trident","Edge"};
        //获取请求头代理信息
        String userAgent = request.getHeader("User-Agent");
        for (String keyWord: IEBrowserKeyWords){
            if (userAgent.contains(keyWord)){
                //IE内核浏览器,统一为UTF8编码显示
                return URLEncoder.encode(fileName,"UTF-8");
            }
        }
        //火狐/谷歌等浏览器统一为ISO-8859-1编码显示
        return new String (fileName.getBytes("UTF-8"),"ISO-8859-1");
    }
  1. jsp的实现
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
    <title>文件的下载</title>
</head>
<body>
    <h1>下载文件</h1>
    <a href="${pageContext.request.contextPath}/files/download?fileName=中文测试.jpg">点击下载</a>
</body>
</html>

好了本篇文章我又成功的水完了


本作品采用知识共享署名 4.0 国际许可协议进行许可。

如果可以的话,请给我钱请给我点赞赏,小小心意即可!

Last modification:May 18th, 2019 at 03:50 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment