怎么通过blob的方式下载文件

Blob对象实现文件下载 Blob对象实现文件下载说明一、Blob对象二、前端三、后端 说明 更新时间:2021/1/7 16:37,更新完基本内容 最近遇到一个需求,文件下载,但需要鉴权,这就意味着不能用后台返回下载链接的方式进行下载,因为一旦被别人拿到这条链接,就可以不需要任何权限就直接下载,因此需要换种思路,在一番百度之后,了解到了blob对象,这就是本文要讲的内容 注意:本文仅为记录学习轨迹,如有侵权,联系删除 一、Blob对象 Blob 对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也 阅读详情

思路:

  • 导出的接口返回的是二进制流
  • axios配置responseType为blob接收二进制流文件为Blob格式
  • 安装file-saver包,实现下载Blob文件  yarn add file-saver

导出的接口的数据类型

export function xxx() {
  return request({
    url: 'xxx',
    // 改变接收数据的类型
    responseType: 'blob' // 使用blob接收二进制文件流
  })
}

改造响应拦截器

判断是不是blob类型,如果是直接返回数据,不再进行解构

// 响应拦截器
service.interceptors.response.use((response) => {
  // axios默认包裹了data
  // 判断是不是Blob
  if (response.data instanceof Blob) return response.data // 返回了Blob对象
  const { data, message, success } = response.data // 默认json格式
  if (success) {
    return data
  } else {
    Message({ type: 'error', message })
    return Promise.reject(new Error(message))
  }
},

安装file-saver

$ npm i file-saver
$ yarn add file-saver

点击按钮调用接口

使用file-saver将blob转化成文件下载

<el-button size="mini" @click="exportEmployee">excel导出</el-button>
 import FileSaver from 'file-saver'
 import { xxxx} from '@/api/employee'
  async  xxxxx() {
      const result = await xxxx() // 导出
      // console.log(result) // 使用一个npm包 直接将blob文件下载到本地 file-saver
      // FileSaver.saveAs(blob对象,文件名称)
      FileSaver.saveAs(result, 'xxx表.xlsx') // 下载文件
 }

前端下载文件的几种方式使用Blob下载文件 前端下载文件是个很通用的需求,一般后端会提供下载方式有两种:1.直接返回文件的网络地址(一般用在静态文件上,比如图片以及各种音视频资源等)2.返回文件流(一般用在动态文件上,比如根据前端选择,导出不同的统计结果 excel 等)第一种方式比较简单,但是使用场景有限。第二种方式通用性更好。 阅读详情

相关推荐

统信UOS/麒麟Kylin OS下利用pyenv实现Python多版本开发环境搭建指南

本文详细介绍了在统信UOS和麒麟Kylin OS国产操作系统下使用pyenv搭建Python多版本开发环境的完整指南。从系统环境准备、pyenv定制安装到Python版本编译实战,提供了针对国产CPU架构的特殊优化方案和常见问题解决方法,帮助开发者高效管理不同Python版本需求。

sea99的博客 1023

使用Blob实现文件下载

大家都知道 a 标签是超链接,点击会跳转至 href 指定的地址。 当我们给 a 标签加上 download 属性后,则会去 href 指定的url下载文件(这里一定是同源的) new Blob() 存放二进制资源 window.URL.createObjectURL() 会将 Blob存放的二进制资源转为url地址,如此而已 思路 : 1. 首先通过 document.createElement('a') 创建一个a标签 用 link 来接受 2. 通过 link.setAttri..

专注于技术,分享实战经验,探索技术边界,用代码构建更美的数字世界。 1万+

【Matlab 六自由度机器人】基于改进型D-H参数的运动学建模与蒙特卡洛工作空间分析

本文详细介绍了如何使用改进型D-H参数法为六自由度机器人建立运动学模型,并利用Matlab Robotics Toolbox实现正运动学计算与可视化。通过蒙特卡洛法对机器人工作空间进行分析,生成三维点云图以直观展示其可达范围,为机器人选型与任务规划提供关键依据。

weixin_29040367的博客 409

前端下载文件(Blob)的几种方式使用Blob下载文件

前端下载文件(Blob)的几种方式使用Blob下载文件 a链接 location的href window.open 使用blob文件下载 1.直接返回文件的网络地址(一般用在静态文件上,比如图片以及各种音视频资源等)2.返回文件流(一般用在动态文件上,比如根据前端选择,导出不同的统计结果 excel 等)第一种方式比较简单,但是使用场景有限。第二种方式通用性更好。

共同进步 1万+

js 下载文件的两种方式Blob和a.download

直接通过a标签的href和click去点击下载文档 this.downloadUrl = "api/download"; &lt;a onClick={this.downloadFile} download="template" href={this.downloadUrl}&gt;&lt;/a&gt; 通过请求去获取二进制流,然后前端生成文档下载下来 downloadFile(url ...

Jane_96的博客 6519

前端处理文件流(blob方式下载文件

前端处理文件流(blob方式下载文件 // 处理文件流 exportDocment(data, title) { //data 文件流、title 导出名 let a = document.createElement('a'); a.download = title; a.style.display = 'none'; let blob = new Blob([data],{ty

weixin_42508580的博客 1403

下载文件blob方式

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1....

weixin_30872157的博客 875

post方式下载blob文件

post方式下载blob文件

zjx147的博客 491

文件下载-使用blob二进制流的方式下载后台文件

参考代码 //url请求地址,datas传给后台的参数,fileName文件名,format文件类型后缀名如.xls  downLoadFile(url,datas,fileName,format){   this.http.post(url, datas, { responseType: 'blob' }).subscribe((result:any)=>{    ...

weixin_44022064的博客 1421

servlet文件上传blob_springmvc和servlet下的文件上传和下载(存文件目录和存数据库Blob两种方式)...

项目中涉及了文件的上传和下载,以前在struts2下做过,今天又用springmvc做了一遍,发现springmvc封装的特别好,基本不用几行代码就完成了,下面把代码贴出来:FileUpAndDown.jspusing commons Upload to upload filefunction downFile(){var fileId = document.getElementById("fil...

weixin_39622628的博客 198

vue+axios+blob方式下载文件

1、vue+axios下载文件流 let that=this; that.$ajax({ url: ‘地址’, method: ‘get’, responseType: “blob”, //必须要填写 headers:{‘Content-Type’:‘application/x-www-form-urlencoded’, ‘x-locale’:‘zh-CN’} }).then(function ...

u012409048的博客 3347

post方式返回文件流实现前端blob下载,responseType: ‘blob‘无效

一般情况下,下载分为好几种,但是常用的是get下载文件流直接下载post下载文件流是很少见的,但是鉴于参数太多,不能走get 只能走post下载,post下载分为两种:1.form表单下载2.post返回文件流转成blob下载,研究了很久 也很坑,上代码:这个地方如果responseType设为blob的话,返回的文件流将会被转成blob对象,不是文件流,但是无论怎么设置都没有转成blob对象,网上有很多解释,一个是说封装好的axios设置responseType是无效的,于是乎,我就引入了原生axios,

哈哈hyc的博客 4482

servlet文件上传blob_springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)...

参与该项目的文件上传和下载。一旦struts2下完成,今天springmvc再来一遍。发现springmvc特别好包,基本上不具备的几行代码即可完成,下面的代码贴:FileUpAndDown.jspusing commons Upload to upload filefunction downFile(){var fileId = document.getElementById("fileId")...

weixin_39748445的博客 118

js使用Blob方式实现excel表格的下载(流文件下载)

js使用Blob方式实现excel表格的下载(流文件下载) js前端下载工具 getToken 为了获取token, 不需要的可以去除 downLoadXlsx中的data, 是数据的搜索参数(根据参数搜索出的结果进行导出), 不需要搜索参数的可以去除data import axios from 'axios' import { getToken } from '@/utils/auth' const mimeMap = { xlsx: 'application/vnd.openxmlform

Radish 1万+

使用eggjs + axios post方式通过blob对象进行文件下载

以下是egg.js的后台代码 const Controller = require('egg').Controller; const path = require('path'); const fs = require('fs'); class HomeController extends Controller { async index() { const filePath = path.resolve(this.app.config.static.dir, 'file_message_to

胡聊前端的博客 1749

前端下载文件方式(Blob)

【代码】前端下载文件方式(Blob)

小白目的博客 658

blob图片文件下载方式

浏览器控制台执行a.click();

深度 215

angular 使用blob二进制流的方式下载后台文件

转自https://blog.csdn.net/shengandshu/article/details/81127279 先说两个比较古老的js下载方式, 1. window.open(src)和window.location = src 2. form表单提交 这两个方式都有局限性,对于需要传递大量参数的下载请求,可以这样写: this.http.post(`${thi...

weixin_38168322的博客 225

文件预览/下载方式:通过二进制流(Blob下载、或者通过文件Url下载

【代码】文件预览/下载方式:通过二进制流(Blob下载、或者通过文件Url下载

TTianYe的博客 1480

雪龙号.FBX@三维模---1715

格式(FBX)大小(11.16MB)面数(161094)顶点(287380)贴图(12)动画(无),交通运输,船舶,油轮————# 雪龙号.FBX三维模型详情介绍## 一、模型简介雪龙号.FBX三维模型是一款高度精细的船舶模型,以著名的“雪龙号”为原型打造。该模型文件大小为11.16MB,采用FBX格式,便于在多种三维软件中使用和编辑。## 二、核心特征1. **高细节呈现**:面数达161094,顶点数量为287380,能够精准地展现雪龙号的外观轮廓、船体结构、甲板设施等细节,从船体的线条到船上的设备,都栩栩如生。2. **丰富贴图**:配备12张贴图,为模型增添了真实的材质质感,如金属的光泽、船体涂装的色彩等,使模型在视觉上更具真实感。3. **专业属性**:作为交通运输领域中船舶类的油轮模型,它严格遵循船舶设计与建造的专业标准,体现了雪龙号在科研考察、极地航行等任务中的功能特性。## 三、适用场景1. **影视制作**:在电影、纪录片中,可用于还原雪龙号在极地航行、科研作业等场景,为影片增添真实感和视觉冲击力,助力打造震撼的海洋、极地题材影视作品。2. **游戏开发**:适用于航海、冒险类游戏,玩家可以操控这艘精细的雪龙号模型在虚拟海洋世界中航行、执行任务,提升游戏的沉浸感和真实体验。3. **教育展示**:在海洋科学、船舶工程等教育领域,作为教学模型,帮助学生直观地了解雪龙号的结构、功能,以及船舶在交通运输中的作用,增强教学的直观性和趣味性。4. **虚拟仿真**:用于船舶设计、航海模拟等虚拟仿真项目,为工程师、设计师提供逼真的模型参考,辅助进行方案评估、性能测试等工作。雪龙号.FBX三维模型凭借其精细的制作和专业的属性,在多个领域都能发挥重要作用,为用户带来高质量的三维视觉体验和实际应用价值。

上一篇: 对模糊搜索做防抖处理
下一篇: css3的新特性
mz929
博客等级 码龄3年 2粉丝 · 42原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值