VIP免费

spirngboot+vue实现通用的文件下载方式

vue文件下载 原创
39
DEMO程序园
程序猿 2020-11-10
积分:0

简介:

springboot+vue实现文件下载,网上很多教程都是通过处理返回的文件流,判断文件类型,指定下载,而且很多博文都是以导出数据为例子在演示,这种方式通用性太差,其实我们先来回想一下在普通web项目时我们实现文件下载的方式: 首先:后台将文件以流的形式输出,前台然后直接访问这个链接就实现了下载,但是在前后端分离的情况下,我们直接a标签访问出现跨域,所以可以通过如下形式模拟a标签来处理; &n

springboot+vue实现文件下载,网上很多教程都是通过处理返回的文件流,判断文件类型,指定下载,而且很多博文都是以导出数据为例子在演示,这种方式通用性太差,其实我们先来回想一下在普通web项目时我们实现文件下载的方式:

首先:后台将文件以流的形式输出,前台然后直接访问这个链接就实现了下载,

但是在前后端分离的情况下,我们直接a标签访问出现跨域,所以可以通过如下形式模拟a标签来处理;


 download(id,name) {

      download(id).then(response => {

        try {

          const blobUrl = window.URL.createObjectURL(response )

          const a = document.createElement('a')

          a.style.display = 'none'

          a.download = name

          a.href = blobUrl

          a.click()

        } catch (e) {

          alert('保存文件出错')

        }

      })

    },


其中response  是我们后台接口返回的文件流,我们只需要创建一个a标签,将文件流放入href中,这样点击就轻松实现了下载任意文件。


后台参考代码(网上copy的)

File file = new File("D://xxx.txt");
response.setCharacterEncoding("utf-8");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition","attachment;fileName=xxx.txt");
FileInputStream fileInputStream = new FileInputStream(file);
byte[] b = new byte[1024];
int length;
while ((length = fileInputStream.read(b)) > 0)
{
    response.getOutputStream().write(b, 0, length);
}


评论
最新发布
2024-05-19
2024-05-19
2024-05-19
2024-05-19
2024-05-19
2024-05-19
2024-05-19
2024-05-19
2024-05-19
2024-05-18
layui

微信扫码关注DEMO程序园公众号

本周热门
1989
1631
1389
1337
1280
1062
1042
996
869
516
热门下载
27
20
19
14
14
12
12
12
12
11