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

  • ilife扫地机器人评测(ilife 11)(ilife扫地机器人售后服务电话)

    ilife扫地机器人评测(ilife 11)(ilife扫地机器人售后服务电话)

  • 苹果拍照九宫格怎么设置(苹果拍照九宫格在哪里设置)

    苹果拍照九宫格怎么设置(苹果拍照九宫格在哪里设置)

  • 微信怎么发信息给朋友(微信怎么发信息给自己)

    微信怎么发信息给朋友(微信怎么发信息给自己)

  • 沙棘蚂蚁森林需要多少能量才能种树(沙棘蚂蚁森林需要种吗)

    沙棘蚂蚁森林需要多少能量才能种树(沙棘蚂蚁森林需要种吗)

  • 荣耀20pro发热严重(荣耀20pro发热烫手怎么回事)

    荣耀20pro发热严重(荣耀20pro发热烫手怎么回事)

  • 苹果充电80%就充不进去怎么回事(苹果充电到80%就不充)

    苹果充电80%就充不进去怎么回事(苹果充电到80%就不充)

  • 只有路由器没有猫能上网吗(只有路由器没有机顶盒怎连电视)

    只有路由器没有猫能上网吗(只有路由器没有机顶盒怎连电视)

  • vc/a是苹果哪个国家版本(vc是什么版本的苹果)

    vc/a是苹果哪个国家版本(vc是什么版本的苹果)

  • 天猫精灵费电吗(天猫精灵耗电一个月多少钱)

    天猫精灵费电吗(天猫精灵耗电一个月多少钱)

  • 微信语音只能听开头(微信语音只能听一半怎么回事)

    微信语音只能听开头(微信语音只能听一半怎么回事)

  • beats耳机连不上苹果手机(beats耳机连不上电脑)

    beats耳机连不上苹果手机(beats耳机连不上电脑)

  • gra-tl00是什么型号(gra一cl00)

    gra-tl00是什么型号(gra一cl00)

  • itunes u中国能用吗(itunes国内怎么用)

    itunes u中国能用吗(itunes国内怎么用)

  • airpodspro充电不亮(airpodspro充电不放耳机)

    airpodspro充电不亮(airpodspro充电不放耳机)

  • mate30pro不小心掉水里咋办(华为mate30pro掉地上)

    mate30pro不小心掉水里咋办(华为mate30pro掉地上)

  • 爱奇艺怎么调清晰度手机(爱奇艺怎么设置清晰度)

    爱奇艺怎么调清晰度手机(爱奇艺怎么设置清晰度)

  • wps电脑版怎么发文件(wps电脑版怎么发送到微信)

    wps电脑版怎么发文件(wps电脑版怎么发送到微信)

  • 电脑wps文字怎么发送(电脑wps怎么设置文字大小)

    电脑wps文字怎么发送(电脑wps怎么设置文字大小)

  • 苹果手机密码忘了(苹果手机密码忘记了怎么重置)

    苹果手机密码忘了(苹果手机密码忘记了怎么重置)

  • 乐视手机恢复出厂设置密码忘了怎么处理(乐视手机恢复出厂设置后怎么登录)

    乐视手机恢复出厂设置密码忘了怎么处理(乐视手机恢复出厂设置后怎么登录)

  • 怎么看热点连接的人(怎么看热点连接的人用了多少流量)

    怎么看热点连接的人(怎么看热点连接的人用了多少流量)

  • 商家收钱码要手续费吗(商家收钱码要手续费嘛)

    商家收钱码要手续费吗(商家收钱码要手续费嘛)

  • 手机上的悬浮球有什么用(手机上的悬浮球怎么关闭)

    手机上的悬浮球有什么用(手机上的悬浮球怎么关闭)

  • iphone付款与配送打不开(iphone付款与配送显示无)

    iphone付款与配送打不开(iphone付款与配送显示无)

  • 文本效果设置为内置渐变填充紫色(文本效果设置为内置样式填充红色着色2)

    文本效果设置为内置渐变填充紫色(文本效果设置为内置样式填充红色着色2)

  • 若依(ruoyi)框架:如何实现灵活自定义路由配置(若依框架是什么框架)

    若依(ruoyi)框架:如何实现灵活自定义路由配置(若依框架是什么框架)

  • 奖励旅游的概念解释
  • 进口关税怎么做分录
  • 有限责任公司的股东人数为多少
  • 个人转让著作权免税吗
  • 原材料入库进项税
  • 计提跟支付有啥区别
  • 当期亏损如何计提所得税
  • 软件销售利润
  • 小规模补交去年的所得税资产负债表怎么调整
  • 企业合并的会计方法选择
  • 商业企业库存商品和销售对不上
  • 增值税与普通发票的关系
  • 公司股东法人变更流程
  • 参加公司比赛后的感想
  • 物业公司收取水费如何开具发票
  • 资金账簿印花税最新政策2022年
  • 印花税的滞纳金怎么计算
  • 外币报表折算差额会计分录
  • 收到留抵税额退税怎么做分录
  • 会计账目怎么理
  • 支付装修押金会退吗
  • 其他业务收入借贷方向会计分录
  • 补交以前年度个税怎么做账
  • 个人所得税应纳税额计算表图片
  • 多抵扣的进项如何做分录
  • 主办会计工作注意什么
  • 音量图标不显示怎么回事
  • 如何设置让电脑运行更快
  • 琼斯的大海怪
  • scrtkfg.exe - scrtkfg是什么进程 有什么用
  • ThinkPHP中html:list标签用法分析
  • 汽车4s店一般会摆放什么小零食
  • 当月没有生产情况正常吗
  • HTML+CSS+JavaScript仿京东购物商城网站 web前端制作服装购物商城 html电商购物网站
  • 结转成本费用的会计分录是什么?
  • 红字发票信息表盖什么章
  • 施救费用和救助费用有哪些主要区别
  • 小规模纳税人开票额度
  • 银行存款利息的会计科目
  • wordpress全站伪静态
  • 计提工资后面附什么
  • python中变量类型有几种
  • 辞退员工补偿金计入什么科目
  • 应发工资包括岗位工资吗
  • 记账凭证附件粘贴
  • 什么叫财务台账
  • 家庭保洁服务包括什么
  • sqlserver避免死锁
  • 合并报表中的抵消分录是什么意思?
  • 员工报销货款会计分录怎么写
  • 法定盈余公积的主要用途
  • 允许在企业所得税税前扣除的
  • 其他权益工具账面价值
  • 所得税减免的会计科目
  • 所得税 补缴
  • 资产负债表编制
  • 如何使用费用分割单
  • delete from 表名 where
  • win8怎么没有我的电脑
  • win10预览版选哪个
  • windows vista界面
  • centos crontab每天执行
  • centos强制关闭程序
  • auto mac
  • win7桌面整理软件
  • win8.1中文版
  • win7如何彻底卸载软件
  • 深入解析windows第7版
  • perl 比较符
  • nodejs中的模块以及作用
  • cocos2d转unity难吗
  • python中安装模块的命令
  • Linux 中的Edquota命令
  • unity3d知乎
  • 个人所得税代扣代缴手续费返还政策
  • 河南网上税务局app下载
  • 江苏徐州如何开无犯罪记录证明
  • 政府对国税局的支持
  • 注册会计师和注册审计师哪个厉害
  • 自来水公司服务热线电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设