美文网首页
vue+springboot后台下载resource下的文件

vue+springboot后台下载resource下的文件

作者: 中v中 | 来源:发表于2021-06-01 17:55 被阅读0次

    首先在springBoot的项目路径下添加模板文件

    image

    Vue前端页面访问下载

    这里使用的post请求,但无参数传递,特别注意的是要设置返回类型为 arraybuffer。(返回值类型说明请看其他文章)

    前端下载文件,需要自定义一个a标签元素,设置它的href值为下载文件的路径则可以下载内容。

    //下载模板
          downloadExcel() {
            this.$http({
              url: this.$http.adornUrl('/mgmt/importExportUsers/downloadTemplate'),
              method: 'post',
              responseType: 'arraybuffer',
              data:this.$http.adornData([], false)
            }).then((res) => {
              let url = window.URL.createObjectURL(new Blob([res.data]))
              let a = document.createElement('a')
              a.setAttribute("download","userTemplate.xls")
              a.href = url
              a.click();
            })
          },
    

    后端下载接口功能

    注意:使用resourceLoader.getResource("classpath:data/userTemplate.xls");生成流的形式,打成jar包之后也可以访问到。

    使用File file = ResourceUtils.getFile("classpath:templates/b_dfd.txt");生成文件的形式,当打成jar包后访问不到。

           /** 下载用户导入模板
         * @param file
         * @return
         * stats:importUsers
         */
        @PostMapping("/downloadTemplate")
        public void downloadTemp(HttpServletRequest request, HttpServletResponse response){
            //定义变量
            String downPath = "";
            ResourceLoader resourceLoader = new DefaultResourceLoader();
            Resource resource = null;
            byte[] buffer = new byte[1024];
            InputStream inputStream = null;
            BufferedInputStream bis = null;
            OutputStream os = null; //输出流
            try {
                //获取resource中的文件,并生成流信息
                resource = resourceLoader.getResource("classpath:data/userTemplate.xls");
                inputStream = resource.getInputStream();
                //设置返回文件信息
                response.setContentType("application/vnd.ms-excel;charset=UTF-8");
                response.setCharacterEncoding("UTF-8");
                response.setHeader("Content-Disposition", "attachment;fileName=" + java.net.URLEncoder.encode("userTemplate.xls","UTF-8"));
                //将内容使用字节流写入输出流中               
                os = response.getOutputStream();
                bis = new BufferedInputStream(inputStream);
                while(bis.read(buffer) != -1){
                    os.write(buffer);
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                //关闭流信息
                try {
                    if(inputStream !=null ) {
                        inputStream.close();
                    }
                    if(bis != null) {
                        bis.close();
                    }
                    if(os != null) {
                        os.flush();
                        os.close();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    

    相关文章

      网友评论

          本文标题:vue+springboot后台下载resource下的文件

          本文链接:https://www.haomeiwen.com/subject/oicgsltx.html