1 回答
TA贡献1836条经验 获得超5个赞
JavaScript 中的类FileReader
包含多种读取文件的方法:
readAsText()
:读取文件并以文本形式返回其内容。适合小文本文件。readAsBinaryString()
:读取文件并以二进制字符串形式返回其内容。适用于任何类型的小文件。readAsDataURL()
:读取文件并返回引用该文件的数据 URL。这对于大文件来说效率很低,因为文件在处理之前会作为一个整体加载到内存中。readAsArrayBuffer()
:这会读取一个文件并返回一个ArrayBuffer
包含“切成小块”的输入文件的文件。这也适用于非常大的文件。
在问题中,readAsDataURL()
使用该方法通常是最方便的。但是,对于非常大的视频文件(以及一般的非常大的文件),它不起作用,因为上述原因会导致空结果。相反,您应该使用readAsArrayBuffer()
:
let reader = new FileReader(); reader.readAsArrayBuffer(file);
现在,文件读取器ArrayBuffer
在加载文件后返回一个。为了能够以 HTML 格式显示视频,我们必须将此缓冲区转换为 blob,然后它可以为我们提供视频文件的 URL:
reader.onload = function(e) {
// The file reader gives us an ArrayBuffer:
let buffer = e.target.result;
// We have to convert the buffer to a blob:
let videoBlob = new Blob([new Uint8Array(buffer)], { type: 'video/mp4' });
// The blob gives us a URL to the video file:
let url = window.URL.createObjectURL(videoBlob);
video.src = url;
}
- 1 回答
- 0 关注
- 111 浏览
添加回答
举报