【无标题】

URL.createObjcetURL的部分详解

文章目录

  • URL.createObjcetURL的部分详解
    • [1. 为什么要使用createObjectURL](#1. 为什么要使用createObjectURL)
    • [2. createObjectURL的基本用法](#2. createObjectURL的基本用法)
    • [3. 转换后的文件进行展示或下载](#3. 转换后的文件进行展示或下载)

首先,想记录一下这点是因为之前关于pdf文件的下载和预览,后端返回工作流时的处理,里面有关于createObjectUrl的使用,所以这里想专门对此进行一个详细的解释

1. 为什么要使用createObjectURL

它是js的一个函数,可以将Blob、file等二进制文件转换成浏览器可以直接显示的URL地址,从而进行展示、下载等操作,例如之前一个文章中关于pdf的预览和下载,后端返回的工作流就需要进行转换

2. createObjectURL的基本用法

创建一个Blob对象后,通过createObjectURL方法将Blob对象转换为URL地址

c 复制代码
//这里先解释一下Blob, Blob就类似于是一个二进制大对象,可以以二进制数据的形式存储图片、音频、视频等文件
//可以通过构造函数创建一个Blob对象,可传的参数有两个,第一个参数是要转换的包含数据的数组,第二个参数是数据的MIME类型
//写法
 const blob=new Bolb(['要转换的文件'],{type:'转换文件的类型'})

常见的MIME类型:

更多的MIME类型可以参考https://www.w3school.com.cn/media/media_mimeref.asp

c 复制代码
//这里我们以后端返回的工作流pdf文件为例
const blob=new Blob([response.data],{type: 'application/pdf')
const url=URL.createObjectURL(blob)

3. 转换后的文件进行展示或下载

展示

例如是图片的预览

c 复制代码
<img :src='{{url}}' />
//这里的url就是通过createObjectURL转换得到的url
//如果是像上文提到的pdf可以通过创建dom,将url赋值给src,或者通过window.open(url)打开新窗口进行预览

下载

下载文件我们就要利用到 a标签上的download属性

c 复制代码
<a :href='{{url}}' download='下载的文件名' >下载文件</a>
//也可以通过js的写法
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', 'pdfdocument.pdf');
document.body.appendChild(link);
link.click();
document.body.removeChild(link);

要注意的是,使用完URL后,需要手动释放,否则可能造成内存泄露等问题

URL.revokeObjectURL(url)

相关推荐
程序员鱼皮10 小时前
我花 300 块,让 Claude Fable 5 开发桌面 APP,值么?
前端
William_Xu10 小时前
JavaScript 并发控制
前端
拾年27510 小时前
从零手写 Ajax:用原生 XHR 搭建前后端交互全流程
前端·javascript·ajax
光影少年10 小时前
懒加载与分包:React.lazy + Suspense
前端·react.js·掘金·金石计划
小林ixn11 小时前
你以为你懂 + 号?看完这篇 Bun + TS 实战,才发现以前全写错了
前端·javascript·typescript
namexingyun11 小时前
开源前端生态如何成为 AI UI 生成的“燃料“:shadcn/ui、Tailwind CSS、Storybook 技术价值全解剖
java·前端·人工智能·python·ui·开源·ai编程
Zyed11 小时前
[STM32]Day15读写FLASH+读取ID
前端·stm32·性能优化
jvxiao12 小时前
你真的懂作用域吗?从编译原理角度深度 JS 的作用域
前端·javascript
Darling噜啦啦12 小时前
二叉树与递归算法实战:从树结构到 LeetCode 爬楼梯,一文吃透前端数据结构与递归思维
前端·javascript·数据结构
星栈12 小时前
Rust + Makepad 应用怎么打包发布:Windows、macOS、Linux 全平台交付
前端·rust