记录--createObjectURL这个API真好用,我举几个场景你们就懂了
🧑💻 写在开头
点赞 + 收藏 === 学会🤣🤣🤣
前言
随着我用 URL.createObjectURL
这个 API 越来越多次,越发感觉真的是一个很好用的方法,列举一下我在项目中用到它的场景吧~
图片预览
以前我们想要预览图片,只能是上传图片到后端后,获取到url然后赋予给img标签,才能得到回显预览,但是有了URL.createObjectURL
就不需要这么麻烦了,直接可以在前端就达到预览的效果~
1 2 3 4 5 6 7 8 9 10 11 12 13 | <body> <input type= "file" id= "fileInput" > <img id= "preview" src= "" alt= "Preview" > <script> const fileInput = document.getElementById( 'fileInput' ); fileInput.addEventListener( 'change' , ( event ) => { const file = event .target.files[0]; const fileUrl = URL.createObjectURL(file); const previewElement = document.getElementById( 'preview' ); previewElement.src = fileUrl; }); </script> </body> |
音视频流传输
举个例子,我们通过MediaStream
去不断推流,达到了视频显示的效果,有了URL.createObjectURL
我们并不需要真的有一个url赋予video标签,去让视频显示出来,只需要使用URL.createObjectURL
去构造一个临时的url即可非常方便
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <body> <video id= "videoElement" autoplay playsinline></video> <script> const videoElement = document.getElementById( 'videoElement' ); navigator.mediaDevices.getUserMedia({ video: true , audio: true }) .then((stream) => { videoElement.srcObject = stream; }) . catch ((error) => { console.error( 'Error accessing webcam:' , error); }); </script> </body> |
结合 Blob
URL.createObjectURL
结合Blob
也可以做很多方便开发的事情~
WebWorker
我们知道,想要用 WebWorker 的话,是要先创建一个文件,然后在里面写代码,然后去与这个文件运行的代码进行通信,有了URL.createObjectURL
就不需要新建文件了,比如下面这个解决excel耗时过长的场景,可以看到,我们传给WebWorker的不是一个真的文件路径,而是一个临时的路径~
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | const handleImport = (ev: Event) => { const file = (ev.target as HTMLInputElement).files![0]; const worker = new Worker( URL.createObjectURL( new Blob([ ` importScripts( 'https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.16.4/xlsx.full.min.js' ); onmessage = function(e) { const fileData = e.data; const workbook = XLSX.read(fileData, { type: 'array' }); const sheetName = workbook.SheetNames[0]; const sheet = workbook.Sheets[sheetName]; const data = XLSX.utils.sheet_to_json(sheet, { header: 1 }); postMessage(data); }; `, ]), ), ); // 使用FileReader读取文件内容 const reader = new FileReader(); reader.onload = function (e: any) { const data = new Uint8Array(e.target.result); worker.postMessage(data); }; // 读取文件 reader.readAsArrayBuffer(file); // 监听Web Worker返回的消息 worker.onmessage = function (e) { console.log( '解析完成' , e.data); worker.terminate(); // 当任务完成后,终止Web Worker }; }; |
下载文件
同样也可以应用在下载文件上,下载文件其实就是有一个url赋予到a标签上,然后点击a标签就能下载了,我们也可以用URL.createObjectURL
去生成一个临时url
1 2 3 4 5 6 7 8 9 10 | // 创建文件 Blob const blob = new Blob([ /* 文件数据 */ ], { type: 'application/pdf' }); // 创建下载链接 const downloadUrl = URL.createObjectURL(blob); const downloadLink = document.createElement( 'a' ); downloadLink.href = downloadUrl; downloadLink.download = 'document.pdf' ; downloadLink.textContent = 'Download PDF' ; document.body.appendChild(downloadLink); |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
2022-06-18 记录--Openlayers 高德腾讯、百度、天地图坐标相互转换