记录--createObjectURL这个API真好用,我举几个场景你们就懂了

news/2024/9/30 15:33:43

🧑‍💻 写在开头

点赞 + 收藏 === 学会🤣🤣🤣

前言

随着我用 URL.createObjectURL 这个 API 越来越多次,越发感觉真的是一个很好用的方法,列举一下我在项目中用到它的场景吧~

图片预览

以前我们想要预览图片,只能是上传图片到后端后,获取到url然后赋予给img标签,才能得到回显预览,但是有了URL.createObjectURL就不需要这么麻烦了,直接可以在前端就达到预览的效果~

<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即可非常方便

<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的不是一个真的文件路径,而是一个临时的路径~

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

 
// 创建文件 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);
 

本文转载于:https://juejin.cn/post/7358289528551686180

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/45196.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

linux 部署jar包

1.准备工作 linux如果没有配置java环境变量的话,具体操作见文末推荐。 2.启动jar包 linux操作系统下启动jar包的方式和windows操作系统没有区别。 用法都是遵循java语法规范。 前提:跳转到要启动的jar包所在目录。cd jar包所在绝对路径使用默认jdk启动 查看当前jdk版本 java …

机器学习--有监督学习--分类算法(KNN算法)

使用场景:做分类的,比如银行想做客户分类,看看新的这个客户,他是高风险用户还是低风险用户。 原理使用:可以用贝叶斯分类,决策树算法,还有KNN,本篇主要整理KNN。 KNN原理:有N个样本点,对新纪录r,使用KNN进行分类,看它属于哪个分类。具体如下: 1、先确定k值,不建议…

Dbeaver执行外部SQL脚本文件创建数据库、建表导入数据等

Dbeaver执行外部SQL脚本文件创建数据库、建表导入数据等点击项目浏览器右键点击选中,然后选择sql文件右键点击连接地址,选中【工具】,选中【创建新任务】填写信息,选中【执行SQL脚本】,然后【下一步】选中脚本文件点击确定选中数据库的连接地址,如果自动关联就无需修改至…

绿色免费离线版JS加密混淆工具 - 支持全景VR加密, 小程序js加密, H5网站加密

自从我们推出在线版的免费JS加密混淆工具以来,受到了广大用户的热烈欢迎。特别是全景开发人员,他们使用该工具加密VR插件的JS代码, 添加域名锁等,都非常有效地保护了插件的代码资源。 最近,我们收到了许多用户的反馈,大家希望能够提供一款桌面版的JS加密混淆工具,以便在离…

nginx四层+七层分享代理实现与tomcat多实例动静分离

实验架构图如下,最终实现负载均衡和动静分离:一、Tomcat 多实例 1.配置思路 1)修改 tomcat 主配置文件 server.xml 中的三个端口号 8080 8005 8009;2)修改 tomcat 启动停止脚本 startup.sh shutdown.sh,添加 export CATALINA BASE CATALINA HONE TOWCAT HOME 变量都指向实…

C# 模式匹配

C# 模式匹配https://www.geeksforgeeks.org/pattern-matching-in-c-sharp/ https://www.codeproject.com/Articles/5368148/Your-Quick-Guide-to-Pattern-Matching-in-Csharp什是模式匹配 模式匹配是一种在代码中识别和提取数据的机制。它允许您以声明式的方式检查对象的形状,而…

Linux 虚拟网络 IPIP

Linux 虚拟网络 IPIPIPIPIPIP隧道是一种点对点的隧道协议,用于在IPv4网络上传输IPv4或IPv6数据包。 IPIP隧道的工作原理是将源主机的IP数据包封装在一个新的IP数据包中,新的IP数据包的目的地址是隧道的另一端。在隧道的另一端,接收方将解封装原始IP数据包,并将其传递到目标…