软件教程 2025年08月6日
0 收藏 0 点赞 722 浏览 1230 个字
摘要 :

SpringBoot与Vue前后端分离的情况下下载文件,如果不做特殊配置,会出现下载失败的清苦。这是因为浏览器有同源策略,即只允许在同一个域名下进行数据交互,如果请求方与……

SpringBoot与Vue前后分离的情况下下载文件,如果不做特殊配置,会出现下载失败的清苦。这是因为浏览器有同源策略,即只允许在同一个域名下进行数据交互,如果请求方与响应体的协议、域名、端口不一致,就会存在跨域问题。即使后端已经配置了允许跨域访问,前端也关闭了vue的安全策略,但是在文件下载这里仍然不能正常下载,可能是因为浏览器默认情况下不允许跨域下载文件。而SpringBoot与Vue前后端分离下载文件跨域的问题解决办法如下:

方法1:在后端的响应体中设置允许跨域的头,如下:

private void genCode(HttpServletResponse response, byte[] data) throws IOException {
        response.reset();
        response.addHeader(\"Access-Control-Allow-Origin\", \"*\");
        response.addHeader(\"Access-Control-Allow-Methods\", \"GET, POST, PUT, DELETE\");
        response.setHeader(\"Content-Disposition\", \"attachment; filename=\\\"article.zip\\\"\");
        response.addHeader(\"Content-Length\", \"\" + data.length);
        response.setContentType(\"application/octet-stream; charset=UTF-8\");
        org.apache.commons.io.IOUtils.write(data, response.getOutputStream());
}

这种方式是输出流的形式,那么Vue是有专门接收流的方式的,而不能交给浏览器来自动处理流而实现下载文件(此坑)

方法2:这里给大家提供一个函数

    // 下载文件
    download(data) {
      let url = window.URL.createObjectURL(data)
      let link = document.createElement(\'a\')
      link.style.display = \'none\'
      link.href = url
      link.download = \"article.zip\" // 设置文件名
      document.body.appendChild(link)
      link.click()
      window.URL.revokeObjectURL(link.href);
    },

函数使用正确的姿势:

this.$http.get(\"请求地址\",{
        responseType: \'blob\'
      }).then(res => {
       
    this.download(res.data) // 将接收的流传入即可
})

SpringBoot与Vue前后端分离下载文件跨域问题的解决办法就是如上的方法,希望对你有帮助

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/6169.html

管理员

相关推荐
2025-08-06

文章目录 一、Promise基础回顾 二、Promise 与 axios 结合使用场景及方法 (一)直接返回 axios …

269
2025-08-06

文章目录 一、模块初始化时的内部机制 二、常见导出写法的差异分析 (一)写法一:module.exports…

107
2025-08-06

文章目录 一、ResizeObserver详解 (一)ResizeObserver是什么 (二)ResizeObserver的基本用法 …

683
2025-08-06

文章目录 一、前期准备工作 (一)下载相关文件 (二)安装必要工具 二、处理扣子空间生成的文件…

338
2025-08-06

文章目录 一、官方文档 二、自动解包的数据类型 ref对象:无需.value即可访问 reactive对象:保持…

371
2025-08-06

文章目录 一、Hooks的工作原理 二、在if语句中使用Hook会出什么岔子? 三、React官方的Hook使用规…

843
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号