Vue前端如何配合SpringBoot后端实现文件下载

从HTML页面下载文件是非常简单的,直接向后端发起请求,后端处理请求就可以了;但是如果前端使用Vue开发,那么实现文件下载就有些曲折:Vue前端本身作为服务端存在,为了实现下载就需要将请求通过代理转到后端服务器,后端服务器将文件响应给Vue前端服务器,Vue前端服务器再实现下载,具体实现如下:

后端代码:

package com.soft.backend;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.nio.file.Files;@Controller
@RequestMapping("/api/file")
public class FileController {@RequestMapping("/download")public void download(String fileName, HttpServletResponse response) throws Exception {ServletOutputStream out = null;ByteArrayOutputStream baos = null;try {//通过输入流获取图片数据InputStream inStream = Files.newInputStream(new File("D:\\1.mp4").toPath());byte[] buffer = new byte[1024];baos = new ByteArrayOutputStream();int len;while ((len = inStream.read(buffer)) != -1) {baos.write(buffer, 0, len);}response.addHeader("Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"),"iso-8859-1"));response.addHeader("Content-Length", "" + baos.size());response.setHeader("filename", fileName);response.setContentType("application/octet-stream");out = response.getOutputStream();out.write(baos.toByteArray());} catch (Exception e) {e.printStackTrace();} finally {baos.flush();baos.close();out.flush();out.close();}}
}

前端代码:

<template><div><button type="button" @click="download">下载</button></div>
</template>
<script>import axios from 'axios'export default {name: 'App',methods: {download() {var fileName="视频.mp4";axios(`/api/file/download`, {headers: {'Authorization': 'Bearer ' + sessionStorage.getItem('token'),'Content-Type': 'application/octet-stream'},methods: 'get',params: {fileName: fileName,},responseType: 'blob'}).then((res) => {if (res.status === 200) {const content = res.dataconst blob = new Blob([content])if ('download' in document.createElement('a')) { // 非IE下载const elink = document.createElement('a') // 创建一个a标签通过a标签的点击事件区下载文件elink.download = fileNameelink.style.display = 'none'elink.href = URL.createObjectURL(blob) // 使用blob创建一个指向类型数组的URLdocument.body.appendChild(elink)elink.click()URL.revokeObjectURL(elink.href) // 释放URL 对象document.body.removeChild(elink)} else { // IE10+下载navigator.msSaveBlob(blob, fileName)}}}).catch(res => {console.log(res)})}}}
</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/20027.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java后端模拟面试 题集⑤

1.先作个自我介绍吧 面试官您好&#xff0c;我叫张睿超&#xff0c;来自湖南长沙&#xff0c;大学毕业于湖南农业大学&#xff0c;是一名智能科学与技术专业的统招一本本科生。今天主要过来面试贵公司的Java后端开发工程师岗位。 大学里面主修的课程是Java、Python、数字图像…

FreeRtos进阶——中断的内部逻辑

中断与非中断API的区别 BaseType_t xQueueSendToBack(QueueHandle_t xQueue,const void *pvItemToQueue,TickType_t xTicksToWait); BaseType_t xQueueSendToBackFromISR(QueueHandle_t xQueue,const void *pvItemToQueue,BaseType_t *pxHigherPriorityTaskWok…

Session+Redis,Token+Redis,JWT+Redis,用户身份认证,到底选择哪种更合适?

1三中方案的比较 在选择Session+Redis、Token+Redis、JWT+Redis这三种用户身份认证方案时,我们需要考虑各自的优势、劣势以及应用场景。以下是对这三种方案的详细分析和比较: 1. Session+Redis 优势: Session登录是一种在Web应用程序中用于跟踪用户状态的机制,通过在服务…

huggingface笔记:实例化大模型(Acclerate)

1 访问大模型的一个障碍&#xff1a;内存量 访问非常大的预训练模型的一个障碍是所需的内存量。当加载预训练的 PyTorch 模型时&#xff0c;通常会&#xff1a; 创建一个随机权重的模型。您的预训练权重。将这些预训练权重放入模型中。——>前两步都需要在内存中有模型的完…

MFC工控项目实例之二添加iPlotx控件

承接专栏《MFC工控项目实例之一主菜单制作》 在WIN10下使用Visual C 6.0 &#xff08;完整绿色版&#xff09;添加iPlotx控件的方法。 1、在资源主对话框界面点击鼠标右键如图选择插入Active控件点击进入。 2、选择iPlotx Contrlolh点击确定。 3、在对话框界面插入iPlotx控件。…

emp.dll文件丢失要怎么解决?荒野大镖客emp.dll修复方法分享

软件运行过程中经常遇到各种技术问题&#xff0c;其中之一就是动态链接库&#xff08;DLL&#xff09;文件丢失的现象。DLL文件是Windows操作系统中一个重要的组件&#xff0c;它包含运行多个应用程序所需要的代码和数据。因此&#xff0c;一个丢失的DLL文件&#xff0c;如“em…

《逆水寒》手游周年庆,热度不减反增引发热议

易采游戏网5月31日最新消息&#xff1a;随着数字娱乐时代的飞速发展&#xff0c;手游市场的竞争愈发激烈。在这样的大背景下&#xff0c;《逆水寒》手游以其独特的古风武侠世界和深度的社交体验&#xff0c;自上线以来便吸引了无数玩家的目光。如今&#xff0c;这款游戏迎来了它…

对象转为Map

方案一&#xff0c;Jackson String json objectMapperFace.writeValueAsString(contract);Map<String,Object> map objectMapperFace.readValue(json, Map.class);方案二 &#xff0c; apache BeanUtils Map<String,String> beanMap null;try {beanMap BeanUti…

MMrotate报错AttributeError: ‘NoneType‘ object has no attribute ‘shape‘

使用MMrotate训练自定义数据集报错&#xff1a; AttributeError: ‘NoneType’ object has no attribute ‘shape’ 2024-05-31 17:48:06,121 - mmrotate - INFO - workflow: [(train, 1)], max: 12 epochs 2024-05-31 17:48:06,121 - mmrotate - INFO - Checkpoints will be …

记录【KVM更改br0网卡IP后,原来ip地址仍在问题】

问题描述 KVM桥接方式创建的虚拟机&#xff0c;因为修改了ifcfg网卡配置文件导致之前的ip地址仍存在&#xff0c;route -n后&#xff0c;默认网关仍是之前的配置 解决 virt-manager进入控制台 ip addr flush dev 网卡名启动网卡 systemctl start Networkmanager systemctl…

相同的树(oj题)

一、题目链接https://leetcxode-cn.com/problems/same-tree/ 二、题目思路 遍历整颗树&#xff0c;判断两棵树的每个位置的结点都相同。 每个结点的左右孩子结点都要综合判断 三、题解代码 bool isSameTree(struct TreeNode* p, struct TreeNode* q) {//如果两颗树的根结点…

Qt实现窗口失去焦点抖动功能

一、失去焦点检测 当窗口失去焦点时会发出FocusOut事件&#xff0c;具体实现如下&#xff1a; 首先给窗口安装事件过滤器&#xff1a; this->installEventFilter(this);然后在事件过滤器函数中判断有没有失去焦点 bool MessageDialog::eventFilter(QObject *object, QEve…

golang中一个优雅的开发和使用命令行工具的库 cobra

在go语言的命令行工具开发中&#xff0c;我们可以使用go官方的flags来解析用户输入参数实现命令行的开发&#xff0c; 但是如果是有涉及二级命令这类的开发用官方的这个flags就比较麻烦了&#xff0c; 今天给大家介绍一个可用帮助我们快速优雅的开发和使用命令行工具的库cobra&…

汇舟问卷:国外问卷调查两小时赚28美金?

现在的年轻人不愿意打工的原因不只是因为累&#xff0c;而且赚的钱也不多。有些人开玩笑地说&#xff0c;摆个摊儿卖点小商品都比上班赚得多&#xff0c;这确实是事实。 打工只能勉强维持生计&#xff0c;不能致富。因此&#xff0c;如果我们想赚大钱&#xff0c;首先需要改变…

炫云亮相第二十届中国国际动漫节国际动漫游戏商务大会!

5月28日-29日&#xff0c;备受瞩目的第二十届中国国际动漫节国际动漫游戏商务大会(iABC2024)在杭州滨江开元名都大酒店隆重召开&#xff01;本届大会以动漫IP为核心&#xff0c;从源头到全系列数字内容&#xff0c;探索创新协同、融合发展、价值转化&#xff0c;并对重点作品和…

IDEA 常用技巧

1、代码块整体移动 选中&#xff0c;tab整体右移选中&#xff0c;shifttab整体左 移 2、统一修改变量 3.方法分割线 seting >> editor >> apperance >> show method separators 4、快捷键 构造器、set与get方法、方法重写、toString 等快捷操 鼠标停留在…

人工智能在消化道肿瘤中的最新研究【24年五月|顶刊速递·05-31】

小罗碎碎念 2024-05-31|医学AI顶刊速递 今天分享的六篇文章,主题是AI+结肠癌。但是,并非所有的文章都是直接与结直肠癌相关,比如第一篇研究的就是肝癌。 我其实想关注的是消化道肿瘤的医学AI研究——消化道由口腔、食管、胃、小肠、大肠和直肠组成,而肝脏虽然不直接参与食…

java海滨学院班级回忆录源码(springboot)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的海滨学院班级回忆录。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 海滨学院班级回忆录的…

运维开发.Kubernetes探针与应用

运维系列 Kubernetes探针与应用 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263…

量子计算:未来技术的变革与应用

量子计算&#xff1a;未来技术的变革与应用 引言 量子计算是近年来科学技术领域的一个前沿话题&#xff0c;它有潜力彻底改变我们处理信息的方式。通过利用量子力学的独特性质&#xff0c;量子计算机可以在某些问题上超越传统计算机的性能&#xff0c;带来计算能力的巨大飞跃…