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

  • oppor11s忘记锁屏密码怎么办(oppor11s忘记锁屏密码怎么打开)

    oppor11s忘记锁屏密码怎么办(oppor11s忘记锁屏密码怎么打开)

  • 抖音怎么调整左右镜像(抖音怎么设置往左滑)

    抖音怎么调整左右镜像(抖音怎么设置往左滑)

  • iQOONeo5是什么屏幕(iqooneo5是什么屏幕玻璃)

    iQOONeo5是什么屏幕(iqooneo5是什么屏幕玻璃)

  • asp木马不具有的功能(木马后缀中,下列哪个是不能执行木马脚本的)

    asp木马不具有的功能(木马后缀中,下列哪个是不能执行木马脚本的)

  • recoverymode是什么意思(recoverymode是什么意思在手机里)

    recoverymode是什么意思(recoverymode是什么意思在手机里)

  • 微信号系统评估中是什么意思(微信账号安全评估)

    微信号系统评估中是什么意思(微信账号安全评估)

  • 可编程控制器的组成部分(可编程控制器的特点)

    可编程控制器的组成部分(可编程控制器的特点)

  • 华为应用市场找不到微信怎么办(华为应用市场找不到kindle)

    华为应用市场找不到微信怎么办(华为应用市场找不到kindle)

  • 全民k歌中好友上线会知道吗(全民k歌中好友菜为什么不能偷)

    全民k歌中好友上线会知道吗(全民k歌中好友菜为什么不能偷)

  • 9602g和4g的区别(9602g与4g区别)

    9602g和4g的区别(9602g与4g区别)

  • 删掉qq聊天记录还有吗(删掉qq聊天记录怎么恢复)

    删掉qq聊天记录还有吗(删掉qq聊天记录怎么恢复)

  • 爱奇艺版权受限怎么下载(爱奇艺版权受限录屏)

    爱奇艺版权受限怎么下载(爱奇艺版权受限录屏)

  • 相册回收站清空了怎么恢复(相册回收站清空了还能恢复吗)

    相册回收站清空了怎么恢复(相册回收站清空了还能恢复吗)

  • 华为微信怎么开美颜(华为微信怎么开启抖音权限)

    华为微信怎么开美颜(华为微信怎么开启抖音权限)

  • 抖音怎么退出公会(抖音怎么退出公会步骤,抖音退公会会对号有影响吗)

    抖音怎么退出公会(抖音怎么退出公会步骤,抖音退公会会对号有影响吗)

  • oppoa9有fm收音机吗(oppoa9收音机在哪)

    oppoa9有fm收音机吗(oppoa9收音机在哪)

  • 小米9pro能装4g卡吗(小米9pro可以用4g网吗)

    小米9pro能装4g卡吗(小米9pro可以用4g网吗)

  • 为什么说索尼是黑科技(索尼为什么厉害)

    为什么说索尼是黑科技(索尼为什么厉害)

  • vivo空心字体怎么恢复(vivoy66空心字体怎么取消)

    vivo空心字体怎么恢复(vivoy66空心字体怎么取消)

  • 电脑e盘不见了(电脑e盘不见了文件如何恢复)

    电脑e盘不见了(电脑e盘不见了文件如何恢复)

  • 荣耀play可以分屏吗(荣耀play能分屏吗)

    荣耀play可以分屏吗(荣耀play能分屏吗)

  • 苹果xr待机多长时间(苹果xr待机多长时间正常)

    苹果xr待机多长时间(苹果xr待机多长时间正常)

  • 梯度下降法(梯度下降法计算题)

    梯度下降法(梯度下降法计算题)

  • KB4523205安装失败怎么办(kb4532945安装失败)

    KB4523205安装失败怎么办(kb4532945安装失败)

  • 做毕业设计,前端部分你需要掌握的6个核心技能(做毕业设计,前景如何)

    做毕业设计,前端部分你需要掌握的6个核心技能(做毕业设计,前景如何)

  • 报税是怎么操作的
  • 所得税视同销售行为有哪些
  • 银行的记账凭证怎么做
  • 分公司是否可以参与投标招标
  • 0申报是不是不需要填数据
  • 其他收益会计分录
  • 挂靠别人公司怎么交税?
  • 核定征收企业股权转让的税收
  • 电算化怎么操作
  • 公允价值变动计入其他综合收益
  • 审计调整分录如何写
  • 转让购入的设备税率
  • 税收分类编码如何填写
  • 自开租赁费发票税率是多少?
  • 跨季度的发票怎么冲销
  • 其他应付款余额在借方表示什么意思
  • 行程单和发票的区别 报销
  • 卷帘机适用税率
  • 可以自行设计的软件
  • 对公账户开通网银有什么好处
  • 租赁发票需要写税号吗
  • 增值税普通发票几个点
  • 企业所得税季报是填累计数吗
  • 金三接口调用失败怎么办?
  • 园林绿化工程公司有哪些
  • 可以关闭系统的快捷键
  • linux文件夹怎么删除
  • 在银行按揭贷款买房是抵押吗
  • PHP:pg_unescape_bytea()的用法_PostgreSQL函数
  • 消费税不可抵扣已纳税款
  • 固定资产的主要特征有哪些
  • php5.4升级到php7
  • wordpress登录注册
  • 预付工程施工款会计分录
  • php获取文本内容
  • 企业购买银行理财
  • 九斑蛾,瑞士 (© Thomas Marent/Minden Pictures)
  • 小程序开发必备的东西有哪些
  • redis设置内存淘汰策略
  • HTTP 错误 500.19- Internal Server Error 错误解决方法
  • 累计摊销属于什么类科目
  • apt-show-versions
  • 公司建造厂房
  • 收取房屋租赁费的会计分录
  • <四>2:掌握Const 与一二级指针结合应用
  • python循环语句的语法
  • 年金现值和终值的计算
  • sql查询结果分页
  • 2023年会计继续教育报名入口
  • 小规模纳税人未开票收入如何申报增值税
  • 新企业购买税控盘,没收入,怎么抵扣
  • 发票失控进项转出所得税
  • 短期借款按月计提的分录
  • 投资子公司现金流量表
  • 收到客户预付款会计分录
  • 建筑业建议
  • 纳税人销售免税产品开具专票
  • 会计去企业还是国企好
  • win7 win8.1双系统安装教程
  • win7系统internet怎么打开摄像头
  • win8系统安装WPS
  • cgi linux
  • win10系统虚拟机安装教程win7
  • win10缺少文件如何修复
  • regloadr.exe - regloadr是什么进程 有什么用
  • 查看电脑是否可以装两个固态
  • win7的环境变量如何还原
  • jquery移动节点的方法
  • 超人飞车助手下载安装
  • unity3drpg游戏教程
  • 批处理隐藏盘符
  • 基于JAVASCRIPT实现的可视化工具是
  • 如何用js实现一个简单的计算器
  • Unity NGUI Tween的用法
  • jquery添加文字
  • jquery常用选择器种类
  • jquery轮播图自动播放
  • 税务u盘是干嘛的
  • 代建单位资质要求
  • 机动驳船是什么
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设