使用 JavaScript object URLs,可以处理图像、音频和视频
时间:2025-11-05 11:54:59 出处:系统运维阅读(143)
许多Web应用程序需要在前端处理文件输入,使用视频或者将文件上传到后端。可处
在这篇文章中,理图我们来看看如何使用object URL来引用可以使用DOM文件对象引用的像音数据。

使用object URLs
我们可以调用 URL.createObjectURL 来从文件对象中创建一个URL字符串对象,频和方法如下。使用视频
const objectURL = window.URL.createObjectURL(fileObj);然后,可处我们可以在URL字符串对象上调用 revokeURL 以从内存中释放URL资源:
URL.revokeObjectURL(objectURL);使用object URLs 显示图片
例如,理图我们可以使用 createObjectURL 方法在 img 元素中显示选定的像音图像文件,如下所示。频和
首先,使用视频我们编写以下HTML:
<input type="file" accept="image/*"> <img />然后,可处我们可以编写以下代码来侦听文件输入的理图change事件,然后使用 createObjectURL 设置 img 元素的像音 src 属性,如下所示:
const fileInput = document.querySelector(input); const img = document.querySelector(img); fileInput.onchange = () => { const file = fileInput.files[0]; img.src = URL.createObjectURL(file); img.onload = () => { URL.revokeObjectURL(img.src); } }在上面的频和代码中,我们在选定的文件对象 file 上调用了 createObjectURL 来创建可以设置为 src 属性值的URL。然后,在加载图像时,网站模板我们调用 revokeObjectURL 清除用于创建URL的资源。
使用object URLs 显示PDF
我们还可以使用object URL来显示PDF。我们使用相同的 crateObjectURL 方法,但将其设置为 iframe 的URL而不是img元素。
例如,我们可以编写以下HTML:
<input type="file" > <iframe>然后,我们可以将 src 属性设置为PDF对象URL的iframe,如下所示:
const fileInput = document.querySelector(input); const iframe = document.querySelector(iframe); fileInput.onchange = () => { const file = fileInput.files[0]; const objUrl = URL.createObjectURL(file); iframe.setAttribute(src, objUrl); URL.revokeObjectURL(objUrl); }我们使用 createObjectURL 和上传的PDF文件来创建Object URL字符串。然后我们可以为其设置 src 属性。然后,PDF将显示在Firefox的iframe中。
将 object URLs 与其他文件类型一起使用
Object URL也可以与其他文件类型一起使用。例如,我们可以选择一个视频文件并通过编写以下代码来播放它。首先,我们编写以下HTML代码:
<input type=file /> <video controls />然后,要播放从文件输入中选择的亿华云视频文件,我们编写:
const fileInput = document.querySelector(input); const video = document.querySelector(video); fileInput.onchange = async () => { const file = fileInput.files[0]; const objUrl = URL.createObjectURL(file); video.src = objUrl; await video.play(); URL.revokeObjectURL(objUrl); }在上面的代码中,我们有一个异步函数,该函数从选定的视频文件创建Object URL。然后,将Object URL设置为video元素的src属性。
然后,我们调用视频 play 以播放视频。 play 方法返回一个Promise,因此我们必须添加一个 await 等待该Promise的解决。
完成此操作后,我们可以在Object URL上调用 revokeObjectURL 以释放资源。
总结
我们可以创建Object URL并将其设置为各种元素的src属性,以显示或播放它们。在大多数浏览器中,它都可以处理图像,音频和视频。
猜你喜欢
- “一个软件只做一件事情”的哲学思想已经被这个新来者彻底颠覆。除了取代了 sysvinit 成为新的系统初始化工具外,systemd 还是一个系统管理工具。目前为止,由于 systemd-sysv 这个软件包提供的兼容性,那些我们使用惯了的工具还能继续工作。但是当 Debian 将 systemd 升级到214版本后,这种兼容性就不复存在了。升级措施预计会在 Debian 8 Jessie 的稳定分支上进行。从此以后用户必须使用新的命令来管理系统、执行任务、变换运行级别、查询系统日志等等。不过这里有一个应对方案,那就是在 .bashrc 文件里面添加一些别名。现在就让我们来看看 systemd 是怎么改变你管理系统的习惯的。在使用 systemd 之前,你得先把 sysvinit 保存起来,以便在 systemd 出错的时候还能用 sysvinit 启动系统。这种方法只有在没安装 systemd-sysv 的情况下才能生效,具体操作方法如下:复制代码代码如下:# cp -av /sbin/init /sbin/init.sysvinit 在紧急情况下,可以把下面的文本:复制代码代码如下:init=/sbin/init.sysvinit添加到内核启动参数项那里。systemctl 的基本用法systemctl 的功能是替代“/etc/init.d/foo start/stop”这类命令,另外,其实它还能做其他的事情,这点你可以参考 man 文档。一些基本用法: systemctl - 列出所有单元(UNIT)以及它们的状态(这里的 UNIT 指的就是系统上的 job 和 service) systemctl list-units - 列出所有 UNIT systemctl start [NAME...] - 启动一项或多项 UNIT systemctl stop [NAME...] - 停止一项或多项 UNIT systemctl disable [NAME...] - 将 UNIT 设置为开机不启动 systemctl list-unit-files - 列出所有已安装的 UNIT,以及它们的状态 systemctl --failed - 列出开机启动失败的 UNIT systemctl --type=mount - 列出某种类型的 UNIT,类型包含:service, mount, device, socket, target systemctl enable debug-shell.service - 将一个 shell 脚本设置为开机启动,用于调试为了更方便处理这些 UNIT,你可以使用 systemd-ui 软件包,你只要输入 systemadm 命令就可以使用这个软件。你同样可以使用 systemctl 实现转换运行级别、重启系统和关闭系统的功能: systemctl isolate graphical.target - 切换到运行级别5,就是有桌面的运行级别 systemctl isolate multi-user.target - 切换到运行级别3,没有桌面的运行级别 systemctl reboot - 重启系统 systemctl poweroff - 关机所有命令,包括切换到其他运行级别的命令,都可以在普通用户的权限下执行。journalctl 的基本用法systemd 不仅提供了比 sysvinit 更快的启动速度,还让日志系统在更早的时候启动起来,可以记录内核初始化阶段、内存初始化阶段、前期启动步骤以及主要的系统执行过程的日志。所以,以前那种需要通过对显示屏拍照或者暂停系统来调试程序的日子已经一去不复返啦。systemd 的日志文件都被放在 /var/log 目录。假如你想使用它的日志功能,需要执行一些命令,因为 Debian 没有打开日志功能。命令如下:复制代码代码如下:# addgroup --system systemd-journal # mkdir -p /var/log/journal # chown root:systemd-journal /var/log/journal # gpasswd -a $user systemd-journal 通过上面的设置,你就可以以普通用户权限使用 journal 软件查看日志。使用 journalctl 查询日志可以获得一些比 syslog 软件更方便的玩法: journalctl --all - 显示系统上所有日志,以及它的用户 journalctl -f - 监视系统日志的变化(类似 tail -f /var/log/messages 的效果) journalctl -b - 显示系统启动以后的日志 journalctl -k -b -1 - 显示上一次(-b -1)系统启动前产生的内核日志 journalctl -b -p err - 显示系统启动后产生的“ERROR”日志 journalctl --since=yesterday - 当系统不会经常重启的时候,这条命令能提供比 -b 更短的日志记录 journalctl -u cron.service --since=2014-07-06 07:00 --until=2014-07-06 08:23 - 显示 cron 服务在某个时间段内打印出来的日志 journalctl -p 2 --since=today - 显示优先级别为2以内的日志,包含 emerg、alert、crit三个级别。所有日志级别有: emerg (0), alert (1), crit (2), err (3), warning (4), notice (5), info (6), debug (7) journalctl >yourlog.log - 将二进制日志文件复制成文本文件并保存到当前目录Journal 和 syslog 可以很好的共存。而另一方面,一旦你习惯了操作 journal,你也可以卸载掉所有 syslog 的软件,比如 rsyslog 或 syslog-ng。假如想要得到更详细的日志信息,你可以在内核启动参数上添加“systemd.log_level=debug”,然后运行下面的命令:复制代码代码如下:# journalctl -alb 你也可以编辑 /etc/systemd/system.conf 文件来修改日志级别。利用 systemd 分析系统启动过程systemd 可以让你能更有效地分析和优化你的系统启动过程: systemd-analyze - 显示本次启动系统过程中用户态和内核态所花的时间 systemd-analyze blame - 显示每个启动项所花费的时间明细 systemd-analyze critical-chain - 按时间顺序打印 UNIT 树 systemd-analyze dot | dot -Tsvg >systemd.svg - 为开机启动过程生成向量图(需要安装 graphviz 软件包) systemd-analyze plot >bootplot.svg - 产生开机启动过程的时间图表systemd 虽然是个年轻的项目,但已有大量文档。首先要介绍给你的是Lennart Poettering 的 0pointer 系列。这个系列非常详细,非常有技术含量。另外一个是免费桌面信息文档,它包含了最详细的关于 systemd 的链接:发行版特性文件、bug 跟踪系统和说明文档。你可以使用下面的命令来查询 systemd 都提供了哪些文档:复制代码代码如下:# man systemd.index 不同发行版之间的 systemd 提供的命令基本一样,最大的不同之处就是打包方式。
- 使用系统在硬盘引导安装系统的方法(通过U盘启动解决无法安装系统的问题)
- 手机图像的改变和进步(从模糊不清到高清晰度,手机图像为我们带来的无限可能)
- vivov3拍照功能全面升级,惊艳你的每一刻(领先科技,手机拍照新)
- 电脑按键乱输入错误的解决方法(排除电脑按键乱输入错误的常见故障)
- 先锋E82L——纯电动汽车的创新巅峰(领航未来,演绎无限可能)
- HTC删除的信息如何恢复?(快速恢复被HTC删除的信息的方法)
- 容声BCD228性能优越的智能冰箱(高效节能,智能互联,为你带来便捷的冰箱体验)
- 创维电视质量怎么样?——消费者评价揭示真相