将客户端生成的数据保存为 JavaScript 中的文件,分块形式保存
Save client generated data as file in JavaScript in chunks
我正在使用webRTC开发一个文件共享应用程序。我想用JavaScript/HTML实现客户端。代码应在客户端浏览器上运行。我需要在通过webRTC下载时保存它们。这些文件可能非常大,在将它们作为文件保存到磁盘之前,我无法完全卸载它们并将它们保存在数组或 blob 中。
是否有任何 API 允许我在收到文件时以块的形式保存文件?
到目前为止,我已经找到了Downloadify,FileSave.js和html5 FileWriterApi。虽然前两个没有分块,并且要求我在保存之前先将完整的文件下载到内存中,但 FileWriterAPI 在大多数浏览器上不可用。
正如 @jordan-gray 所建议的那样,在以下情况下,将块保存在 blob 中并将它们连接到更大的 blob 可能是一种解决方案:
- 不需要块的持久性(即关闭浏览器将删除所有块(
- 该文件仅由用户将其保存到自己的文件系统来保留。Web 应用程序在关闭文件后将无法访问该文件,除非用户再次授予对已保存文件的访问权限。
- 可能,如果文件大小不是太大(您必须进行基准测试才能找到答案(。Chrome对我来说表现得非常好,总共有1GB的块。
我创建了一个将 blob 用作块的简单测试。您可以使用不同的大小和块数参数:
var chunkSize = 500000;
var totalChunks = 200;
var currentChunk = 0;
var mime = 'application/octet-binary';
var waitBetweenChunks = 50;
var finalBlob = null;
var chunkBlobs =[];
function addChunk() {
var typedArray = new Int8Array(chunkSize);
chunkBlobs[currentChunk] = new Blob([typedArray], {type: mime});
console.log('added chunk', currentChunk);
currentChunk++;
if (currentChunk == totalChunks) {
console.log('all chunks completed');
finalBlob = new Blob(chunkBlobs, {type: mime});
document.getElementById('completedFileLink').href = URL.createObjectURL(finalBlob);
} else {
window.setTimeout(addChunk, waitBetweenChunks);
}
}
addChunk();
如果确实需要这种持久性,W3C 文件系统 API 应支持所需的内容。您可以使用它将块写入单独的文件,然后当所有块完成后,您可以读取所有块并将它们附加到单个文件中,并删除块。
请注意,它的工作原理是为应用程序分配沙盒文件系统(针对给定配额(,并且只有该应用程序才能访问这些文件。如果文件打算在 Web 应用程序外部使用,则可能需要使用该函数将文件从应用程序文件系统保存到他的"普通"文件系统。您可以使用 createObjectURL(( 方法执行类似操作。
您对浏览器支持的当前状态是正确的。文件系统 API polyfill 可用,它基于 IndexedDB(支持更广泛(作为文件系统仿真后端。我没有在大文件上测试填充物。您可能会遇到大小限制或性能限制。
你检查 https://github.com/Peer5/Sharefest 了吗?它应该满足您的要求
- 在Firefox中自动保存文件
- 提示用户通过AJAX调用保存文件
- 如何提供保存文件而不是从internet explorer打印文件的选项
- Basecamp的Trix WYSIWYG编辑器gem没有在Rails 4应用程序中保存文件附件
- 钛:从Android的相机/图库图像本地保存文件
- 如何使用office.js检查未保存文件的具体文件扩展名
- node-webkit:将数据导出到csv并提示用户保存文件
- 通过本地应用程序的Javascript保存文件
- 如何为使用 JSP 生成的下载文件显示“保存文件”对话框
- 在浏览器中保存文件的Javascript
- 使用数据URI提示用户保存文件
- 如何在使用php使用jquery编辑文件后保存文件
- 如何在Safari中显示保存文件对话框
- Javascript:使用ActiveXobject保存文件
- 强制浏览器在单击链接后保存文件
- 如何在javascript中将事件添加到浏览器的“保存文件”对话框中
- 谷歌浏览器扩展程序在客户端保存文件
- 在文件保护程序.js中保存文件后关闭窗口
- 保存文件选项,用于将html文件保存在系统中的给定位置
- 使用不同的扩展名保存文件