位置: IT常识 - 正文

vue+springboot使用文件流实现文件下载(vue springboot)

编辑:rootadmin
vue+springboot使用文件流实现文件下载 前言

推荐整理分享vue+springboot使用文件流实现文件下载(vue springboot),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:springboot+vue项目,vue3 springboot,springboot vue3,vue springboot项目,springboot+vue项目,springboot vue3,vue+spring boot,vue+spring boot,内容如对您有帮助,希望把文章链接给更多的朋友!

本次将使用vue和springboot通过文件流的方式教大家怎么去实现文件的下载,那么话不多说,我们直接开始

相关vue导出文件

以下链接为我其他vue进行下载导出文件文章 vue实现把字符串导出为txt

步骤文件路径

要进行下载的话,我们肯定是需要一个路径进行获取到我们的文件的,那么本次我们的文件路径是这样:

D:\file\文件名称.pdfvue+springboot使用文件流实现文件下载(vue springboot)

ps: 文件名称.pdf是我进行上传的文件,D:\file\是我本地D盘下的磁盘路径 本次是在文件上传成功的基础上进行的 另外,如果希望知道怎么上传文件可以参考我的文章: elementUI加springboot实现上传excel文件给后端并读取excel

vue前端代码

前端界面部分,比较简单,就是一个按钮,绑定一个click点击事件方法 本次我使用的框架为elementUI ,其他前端框架也是通用的,最主要是看逻辑部分 具体界面代码如下:

<template> <div> <el-button size="medium" type="success" plain @click="downLoadFile">下载</el-button> </div></template>

最终按钮是这样 然后是JavaScript的逻辑部分 本次JavaScript逻辑有使用axios调用后端,具体如何使用和引入,参照百度

export default { name:"xxx", data(){ return{ filePath: 'D:\file\文件名称.pdf', // 文件路径 fileName: '文件名称.pdf', // 文件名称 } }, methods:{ // 下载文件方法 downLoadFile() { this.$axios.get("/downFile/downLoadFile",{ params: { path: this.filePath, name: this.fileName }, responseType: 'blob' }).then(res => { const blob = new Blob([res.data]); const fileName = res.headers["content-disposition"].split(";")[1].split("filename=")[1]; if ('download' in document.createElement("a")) { const link = document.createElement("a"); link.download = fileName; link.style.display = 'none'; link.href = URL.createObjectURL(blob); document.body.appendChild(link); link.click(); URL.revokeObjectURL(link.href); document.body.removeChild(link); } else { navigator.msSaveBlob(blob, fileName); }})} },}

ps: 这边需要重点提一下,上面的代码 params: 需要传的参数,本次上传到的是路径和文件名称 responseType 我们申明一个blob的文件流的请求类型,让后端返回一个blob流文件,前端接收 res : 后端返回结果,可能被包了几层消息请求,根据实际的请求是决定是res.data或res.data.data或其他 res.headers["content-disposition"]:这里是由后端暴露一个请求头content-disposition,如果你能够直接知道文件名称,后端的暴露请求头步骤可以直接省略 document.createElement("a"): 通过创建一个< a>< /a>的标签,将文件流填入到a标签的url路径的方式把文件下载下来

后端代码controller层import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;import javax.servlet.http.HttpServletResponse;@RestController@RequestMapping("/downFile")public class DownFileController { @Resource private DownFileService downFileService;@GetMapping("/downLoadFile") @PassToken public ResultVO downLoadFile(@RequestParam("path") String path,@RequestParam("name") String name,HttpServletResponse response) throws Exception { return downFileService.downLoadFile(path,name,response); }}service层import org.springframework.stereotype.Service;import javax.servlet.http.HttpServletResponse;import java.io.*;@Servicepublic class DownFileService { public ResultVO downLoadFile(String path,String name,HttpServletResponse response) { File file = new File(path); byte[] buffer = new byte[1024]; BufferedInputStream bis = null; OutputStream os = null; try { //文件是否存在 if (file.exists()) { //设置响应 response.setContentType("application/octet-stream;charset=UTF-8"); response.setHeader("Access-Control-Expose-Headers", "Content-Disposition"); response.setHeader("Content-Disposition","attachment;filename="+name); response.setCharacterEncoding("UTF-8"); os = response.getOutputStream(); bis = new BufferedInputStream(new FileInputStream(file)); while(bis.read(buffer) != -1){ os.write(buffer); } } }catch (Exception e) { e.printStackTrace(); } finally { try { if(bis != null) { bis.close(); } if(os != null) { os.flush(); os.close(); } } catch (IOException e) { e.printStackTrace(); } } return new ResultVO(ResultCode.SUCCESS); }}

其中我的返回值ResultVO是一个自定义返回值,如需要,具体的代码如下:

import lombok.AllArgsConstructor;import lombok.Getter;import lombok.NoArgsConstructor;import lombok.ToString;// 统一响应结果@Getter@NoArgsConstructor@AllArgsConstructor@ToStringpublic class ResultVO<T> { // 响应码 默认1000成功 private int code; // 响应信息 来说明响应情况 private String msg; // 响应的具体数据 private T data; public ResultVO(T data) { this(ResultCode.SUCCESS, data); } public ResultVO(Integer code, String msg, T data) { this.code = code; this.msg = msg; this.data = data; } public ResultVO(ResultCode resultCode, T data) { this.code = resultCode.getCode(); this.msg = resultCode.getMsg(); this.data = data; } public ResultVO(Integer code, String msg) { this.code = code; this.msg = msg; this.data = null; }}import lombok.Getter;/** * 响应码枚举 */@Getterpublic enum ResultCode { SUCCESS(1000, "操作成功"), FAILED(1001, "响应失败"), VALIDATE_FAILED(1002, "参数校验失败"), NO_RESULT(1003, "未查询到相关信息"), MES_ERROR(1004, "未查询到相关信息"), NO_AUTHORITY(1005, "无权限"), DATA_EXIST(1006, "数据已存在"), ERROR(5000, "未知错误"), FILE_UPLOAD_ERROR(5001, "文件上传失败"); private int code; private String msg; ResultCode(int code, String msg) { this.code = code; this.msg = msg; }}

以下截图为我下载成功的截图文件

结语

以上就是我vue+springboot使用文件流实现文件下载的具体步骤

本文链接地址:https://www.jiuchutong.com/zhishi/298831.html 转载请保留说明!

上一篇:JS获取本机IP地址的方法(js获取本机ip地址)

下一篇:【深度学习】datasets.ImageFolder 使用方法

  • 如何退出qq群(如何退出QQ群的一起听歌)

    如何退出qq群(如何退出QQ群的一起听歌)

  • 抖音注销以后别人还能看到我吗(抖音注销以后别人还能私信吗)

    抖音注销以后别人还能看到我吗(抖音注销以后别人还能私信吗)

  • 苹果来电闪烁在哪里设置(苹果来电时闪灯)

    苹果来电闪烁在哪里设置(苹果来电时闪灯)

  • mate30pro换屏幕还防水吗(mate30pro换屏幕还好用吗)

    mate30pro换屏幕还防水吗(mate30pro换屏幕还好用吗)

  • i7 6600u是什么档次(i7-6600u什么水平)

    i7 6600u是什么档次(i7-6600u什么水平)

  • 钉钉显示钉盘空间不足怎么办(钉钉钉盘空间不足怎么办)

    钉钉显示钉盘空间不足怎么办(钉钉钉盘空间不足怎么办)

  • 华为p40怎么删除正在运行(华为p40怎么删除门禁卡)

    华为p40怎么删除正在运行(华为p40怎么删除门禁卡)

  • 红米n0te4X充电断断续续

    红米n0te4X充电断断续续

  • 手机能测量长度吗(手机能测量长度面积的软件收费吗?)

    手机能测量长度吗(手机能测量长度面积的软件收费吗?)

  • 微信注册显示环境异常怎么解决(微信注册显示环境异常 请稍后再试 知乎)

    微信注册显示环境异常怎么解决(微信注册显示环境异常 请稍后再试 知乎)

  • 电话被对方拉黑了发信息对方能看到吗(电话被对方拉黑了发短信对方能收到吗)

    电话被对方拉黑了发信息对方能看到吗(电话被对方拉黑了发短信对方能收到吗)

  • 复印机扫描是什么意思(复印机扫描是干嘛的)

    复印机扫描是什么意思(复印机扫描是干嘛的)

  • 主板黄灯亮无法开机(主板亮黄灯开机没反应)

    主板黄灯亮无法开机(主板亮黄灯开机没反应)

  • 8个字节含二进制的个数是(8字节含二进制位数)

    8个字节含二进制的个数是(8字节含二进制位数)

  • oppo手机接不到电话是怎么回事(oppo手机接不到短信验证码怎么办)

    oppo手机接不到电话是怎么回事(oppo手机接不到短信验证码怎么办)

  • 华为手机收藏夹在什么位置(华为手机收藏夹的东西怎么拷到电脑)

    华为手机收藏夹在什么位置(华为手机收藏夹的东西怎么拷到电脑)

  • 小红书怎样重置爱好(小红书怎样重置IP)

    小红书怎样重置爱好(小红书怎样重置IP)

  • 趣步为什么置换失败(趣步置换500个需要等多久)

    趣步为什么置换失败(趣步置换500个需要等多久)

  • 抖音咋删除自己的视频(抖音咋删除自己的视频,那样还看的见吗)

    抖音咋删除自己的视频(抖音咋删除自己的视频,那样还看的见吗)

  • 苹果x怎么截滚动长图(苹果x怎么截滚动的图片)

    苹果x怎么截滚动长图(苹果x怎么截滚动的图片)

  • excel如何绘制表格(excel表格线)

    excel如何绘制表格(excel表格线)

  • qq被删除后对方知道吗(qq对方把你删除了)

    qq被删除后对方知道吗(qq对方把你删除了)

  • 格力润享带wifi功能吗(格力润享带自清洁功能吗)

    格力润享带wifi功能吗(格力润享带自清洁功能吗)

  • iphone xs max多长(iPhone XS Max多长)

    iphone xs max多长(iPhone XS Max多长)

  • 织梦dedecms提交自定义表单后发送到指定邮箱(将织梦dedecms转换到wordpress)

    织梦dedecms提交自定义表单后发送到指定邮箱(将织梦dedecms转换到wordpress)

  • 全国增值税发票查验平台
  • 印花税计提缴纳的会计分录
  • 房产税的征收范围包括农村吗
  • 生产成本和销售费用是对应账户吗
  • 外购无形资产的摊销额计入什么费用
  • 用友财务软件怎么设置二级科目
  • 主营业务收入没收到钱怎么做账
  • 短期借款现金流
  • 开户以后不用要钱吗
  • 已认证的发票如何冲红步骤
  • 劳保如何入账
  • 增值税留抵税额抵减欠税
  • 佣金和手续费税前扣除比例
  • 预提土地使用税的分录
  • 自产自销免税物品包括哪些
  • 企业允许加计扣除的研发费用主要包括哪些?
  • 季度销售额不超过30万,城建税减免
  • 营改增后发票
  • 什么情况下要办居住证
  • 一般企业的会计原始凭证有哪些类型
  • 小规模纳税人增值税超过30万怎么纳税
  • 房屋租赁发票需要什么资料
  • 已认证的发票对公司影响
  • 苹果系统中英文切换快捷键
  • 信用卡扣手续费怎么算的
  • 奖金扣税标准税率表
  • 补交地税多少钱
  • 出租固定资产收入计入什么科目
  • php处理图片需要什么扩展
  • 房屋装修费如何入账
  • PHP:pg_affected_rows()的用法_PostgreSQL函数
  • 房地产佣金手续费财务处理
  • 固定资产清理科目核算内容
  • php ucwords() 函数将字符串中每个单词的首字符转换为大写(实现代码)
  • 销售产品是销项税额还是进项税额
  • 以前年度损益调整在利润表中怎么填
  • 实战到底究竟是什么意思啊
  • VUE3.2 + vue-echarts + DataV 数据可视化大屏(项目)
  • 前端进阶教程
  • node 文件
  • linux如何使用
  • systoolspace
  • 调用系统服务出错原因
  • mongodb数据库的层次结构
  • sqlserver数据库锁表如何解锁
  • 解决Dede5.6联动类型更改排序数字的BUG
  • 营业外收入汇算清缴时也得计入收入
  • 以权益结算的股份
  • SQL Server 2008用'sa'登录失败,启用'sa'登录的解决办法
  • 欠款在公司注销怎么处理
  • 库存现金银行存款用什么凭证
  • 出差人员的住宿费计入什么科目
  • 调整以前年度多计提的增值税
  • 长期借款计提利息会计分录怎么做
  • 损益类科目结转本年利润方向
  • 首次计提坏账准备应计入
  • 增值税免税入账
  • 销售的差额如何分录
  • 事业单位的非税收入账务处理
  • 项目毛利润怎么算
  • windows xp的设备管理器在哪
  • 苹果电脑mac系统怎么用
  • macbook安装ghost win10
  • mac电脑 删除废纸篓里的指定文件
  • iphone看mac
  • final cut pro能破解吗
  • ntldr文件在哪
  • Cocos2dx CCLabelAtlas字体与CCLabelTTF字体的使用方法
  • 使用scp获取远程linux服务器上的文件 linux远程拷贝文件
  • unity集成到app后变大了
  • 编写高性能代码时以下哪种技术可用于减少内存访问延迟
  • Python工程师面试题 与Python Web相关
  • js怎么定义类
  • 海关跟税务关系的区别
  • 研发材料占研发费用比例超出50%
  • uk开票网络连接异常怎么回事
  • 中通快递深圳同城多少钱
  • 公务员考试税局
  • 黑龙江省税务培训网官网
  • 西安市人力资源和社会保障局关于2020年
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设