牛骨文教育服务平台(让学习变的简单)
博文笔记

微信公众号下载文件实现

创建时间:2016-08-12 投稿人: 浏览次数:21532

前一段时间在做一个企业号的小项目,其中包含了文件的上传与下载,可是在开发的工程中发现最简单的下载方式在微信中是无法实现的,后来上网找了一下资料试了一下解决了这个问题:


因为也是刚开始从事web开发所以很多东西都是从头学起,所以刚开始做文件下载的时候基本就是想到从接口中获得文件地址然后一个a标签href属性填入文件地址即可实现:

<a href="fileAddress"  download="fileName" >download</a>

可是后来应用于微信企业号中发现无法实现,点击后无反映(但在UC,Chrome等手机浏览器都可以),上网查资料发现因为内置浏览器屏蔽了下载功能,所以这种传统方法无法下载,但是因为是开发企业号,下载的页面因为微信发送的code的问题无法在其他浏览器中打开,只能在微信或者开发者工具中打开,所以当时比较纠结。
后来自己查了一些公众号的文件下载,因为以前也玩过一些安卓,毕竟公众号也是用微信内嵌的浏览器打开的,只要以流文件返回的话应该是会有隐式意图的,所以就用流的形式试了一下,发现果然可以,使用的是springMVC封装的文件下载,代码如下:

@RequestMapping("/eim_eg/download")
    public ResponseEntity<byte[]>  download(HttpServletRequest request,HttpServletResponse response) throws IOException {
        String fileName = request.getParameter("fileName");
        String fileRealName = request.getParameter("fileRealName");
        if(fileName==null || fileName=="" ||fileRealName==null ||fileRealName==""){
            return null;
        }
        fileRealName+="文件名.pdf";
        HttpHeaders headers = new HttpHeaders();
        String realPath = request.getSession().getServletContext().getRealPath("/");
        File file= new File(realPath+File.separator+"upload"+File.separator+"pdf"+File.separator+fileName);
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        headers.setContentDispositionFormData("attachment", new String(fileRealName.getBytes("utf-8"), "ISO8859-1"));
        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),
                                          headers, HttpStatus.CREATED);
    }

前端代码如下:

<a id="a_new" href="">下载文件</a>
$("#a_new").attr("href",appId+"/eim_eg/download.do?fileName="+要下载的文件名+"&fileRealName="+文件命名);

效果图如下
点击该标签弹出选择浏览器点击该标签会弹出选择浏览器
这里写图片描述
点击浏览器开始下载
这里写图片描述

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。