位置: 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 使用方法

  • 苹果12promax和13promax手机壳是一样的吗(苹果12promax和13promax摄像头区别)

    苹果12promax和13promax手机壳是一样的吗(苹果12promax和13promax摄像头区别)

  • 苹果11铃声如何设置自己的歌(苹果11铃声如何设置渐强)

    苹果11铃声如何设置自己的歌(苹果11铃声如何设置渐强)

  • 快手剪辑视频都是用什么软件(剪辑快手短视频)

    快手剪辑视频都是用什么软件(剪辑快手短视频)

  • 电容并联容量大还是小(电容并联容量大还是小计算)

    电容并联容量大还是小(电容并联容量大还是小计算)

  • 电脑怎么设置屏保时间(电脑怎么设置屏幕休眠)

    电脑怎么设置屏保时间(电脑怎么设置屏幕休眠)

  • 多媒体信息在计算机中的储存形式是(多媒体信息在计算机中有哪些表示方法)

    多媒体信息在计算机中的储存形式是(多媒体信息在计算机中有哪些表示方法)

  • 有源天线和无源天线的区别(有源天线和无源天线优缺点)

    有源天线和无源天线的区别(有源天线和无源天线优缺点)

  • 美版苹果11和国行有什么区别(美版苹果11和国版苹果12的卡槽可以换的吗)

    美版苹果11和国行有什么区别(美版苹果11和国版苹果12的卡槽可以换的吗)

  • nova7是双扬声器吗(华为nova7几个扬声器)

    nova7是双扬声器吗(华为nova7几个扬声器)

  • 主机运行显示器键盘鼠标不亮(主机运行显示器和键盘没反应)

    主机运行显示器键盘鼠标不亮(主机运行显示器和键盘没反应)

  • 腾讯课堂是否可以回放(腾讯课堂是否可以看学生状态)

    腾讯课堂是否可以回放(腾讯课堂是否可以看学生状态)

  • 荣耀9x可以用18w充电吗(荣耀9x可以用手机开空调吗)

    荣耀9x可以用18w充电吗(荣耀9x可以用手机开空调吗)

  • 图表向导按钮在哪(图表向导怎么打开)

    图表向导按钮在哪(图表向导怎么打开)

  • 手机管家拦截的短信在哪里看(手机管家拦截的短信是不是看不到内容)

    手机管家拦截的短信在哪里看(手机管家拦截的短信是不是看不到内容)

  • OPPO k5支持息屏指纹解锁吗(oppok5手机怎么设置永久亮屏)

    OPPO k5支持息屏指纹解锁吗(oppok5手机怎么设置永久亮屏)

  • 苹果x出厂是啥系统(iponex出厂时间)

    苹果x出厂是啥系统(iponex出厂时间)

  • 蓝牙音响怎么屏蔽微信语音(蓝牙音响怎么屏蔽信号)

    蓝牙音响怎么屏蔽微信语音(蓝牙音响怎么屏蔽信号)

  • 天府通app可以坐公交车吗(天府通app可以坐新都公交车吗)

    天府通app可以坐公交车吗(天府通app可以坐新都公交车吗)

  • vivox9怎么关闭低电量模式(vivox7手机怎么关闭低电量模式)

    vivox9怎么关闭低电量模式(vivox7手机怎么关闭低电量模式)

  • 怎么打开记录运动数据(记录运动设置在哪)

    怎么打开记录运动数据(记录运动设置在哪)

  • 小天才z7什么时候上市(小天才z7什么时候上市多少钱)

    小天才z7什么时候上市(小天才z7什么时候上市多少钱)

  • 桌面文件如何发到qq(桌面文件如何发送给别人)

    桌面文件如何发到qq(桌面文件如何发送给别人)

  • 手机不卡微信卡怎么办(手机不卡微信卡是什么原因)

    手机不卡微信卡怎么办(手机不卡微信卡是什么原因)

  • win10系统中MIDI文件怎么打开并编辑?(mid文件和midi文件)

    win10系统中MIDI文件怎么打开并编辑?(mid文件和midi文件)

  • Docker镜像多架构构建(docker运行多个镜像)

    Docker镜像多架构构建(docker运行多个镜像)

  • iframe标签的使用(iframe标签表示的框架)

    iframe标签的使用(iframe标签表示的框架)

  • 金银首饰销售需求分析
  • 税控盘抄报逾期怎么办
  • 零税率是指
  • 增值税几个点怎么算
  • 其他应收款和其他应付款可以通用吗
  • 小规模普通发票要交税吗
  • 预收账款借方和贷方表示什么
  • 个体户4年不注销的后果消
  • 购房尾款发票什么时候开
  • 进销存明细账怎么填写
  • 资产负债表总账科目有哪些
  • 补交以前年度增值税的科目处理
  • 税收的基本特点有
  • 商业保理公司票据贴现账务处理
  • 固定资产原值增加当月计提折旧吗
  • 事业支出期末如何结转?
  • 退税降低
  • 研发部门领用材料会计分录
  • 月末收到一批b材料,结算凭证未到,估价50000
  • 软件开发服务费会计分录
  • 单位付款方式
  • 职工报销差旅费会计科目
  • 金蝶标准版期末结转过不去
  • 投资股权投资基金算不算利好
  • 成本是否有含税金额
  • 折旧是属于公司成本吗
  • 增值税清卡失败f50006
  • 公司开13个点增值税交多少钱
  • 固定资产的折旧从什么时候开始
  • linux虚拟机在哪里输入命令
  • 事业单位工作人员暂行处分办法
  • 企业投资的工程项目包括
  • win10图片密码怎么全屏显示
  • 如何修复win11系统
  • 企业员工个人所得税申报流程
  • 提供应税服务的纳税义务发生时间
  • nicconfigsvc.exe - nicconfigsvc是什么进程 有什么用
  • 农产品核定扣除和计算抵扣的区别
  • 房地产开发企业土地增值税怎么计算
  • php中自定义常量的函数是
  • php使用redis缓存技术
  • python pymongo
  • vmware虚拟机安装在移动硬盘
  • 增值税进项税加计抵减
  • 消耗性生物资产的账务处理
  • 增值税专用发票电子版
  • Python怎么转化为中文
  • 织梦专题页模板
  • SQLserver2008数据库Excel数据导入语句
  • db2入门
  • centos 安装方法
  • 为什么开票需要提供开户许可证
  • 企业收到赠送商品会计分录
  • 交易性金融资产属于流动资产
  • 私车公用属于违反什么纪律
  • 未开票收入如何结转成本
  • 不验资实收资本怎么做账
  • 以前年度少计费用,调整分录
  • 建筑行业挂靠代扣税款如何入账?
  • 公司在银行的贷款会计分录
  • 付给销售人员的佣金会计分录
  • 消防设施 房产税
  • 生物性资产是什么科目
  • 出纳日记账的日期以什么为准
  • 10分钟学会
  • Win Server 2003 使用技巧图解
  • 退休后归什么部门管
  • redhat磁盘挂载
  • windows用户注册
  • win7系统怎么操作
  • Cocos2dx CCSprite CCSpriteFrame CCTexture2D CCAnimation学习总结
  • 详细谈谈哲学的基本问题
  • jquery model
  • jquery给元素添加属性值
  • js输出表格
  • jquery全选和全不选效果
  • python对文件操作采用的统一
  • 国家税务总局惠州仲恺高新技术产业开发区税务局
  • 新疆高龄补贴2024发放标准是多少
  • 河南国税发票查询真伪官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设