将客户端生成的数据作为文件以JavaScript的形式存储在块中

前端之家收集整理的这篇文章主要介绍了将客户端生成的数据作为文件以JavaScript的形式存储在块中前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用webRTC开发一个FileShare应用程序.我想在 JavaScript / HTML中实现客户端.代码应该在客户端浏览器上运行.
我通过webRTC下载时需要保存它们.这些文件可能很大,我不能完全把它们保存下来,并将它们保存在数组或blob中,然后将它们保存到磁盘中作为文件.

有没有API可以让我在接收到文件时将其保存在块中?

到目前为止,我已经发现了Downloadify,FileSave.jshtml5 FileWriterApi.
虽然前两个没有分块,要求我先保存完整的文件到内存,但FileWriterAPI在大多数浏览器上都不可用.

解决方法

如@ jordan-gray所建议的,将块保存在blob中并将它们加入到更大的blob中可能是一个解决方案,如果:

>不需要块的持久化(即关闭浏览器将删除所有块)
>该文件只能由用户将其保存到自己的文件系统.网络应用程序关闭后无法访问该文件,除非用户再次访问保存的文件.
>可能的是,如果文件大小不太大(您必须进行基准测试才能找到). Chrome对我来说表现相当不错,总共为1GB.

我创建了一个simple test for using blobs as chunks.你可以玩不同的大小和块号参数:

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 File System API应该支持您所需要的.您可以使用它将块写入单独的文件,然后当所有块完成后,您可以将它们全部读取并附加到单个文件中,并删除块.

请注意,它可以通过为应用程序分配沙盒文件系统(对于给定的配额),文件只能由该应用程序访问.如果文件意图在Web应用程序之外使用,则可能需要使用该功能文件从应用程序文件系统保存到他的“正常”文件系统.您可以使用createObjectURL()方法做这样的事情.

您是正确的浏览器支持的当前状态. A Filesystem API polyfill是可用的,它是基于IndexedDB(被广泛支持的)作为文件系统仿真后端.我没有在大文件上测试polyfill.您可能会遇到大小限制或性能限制.

原文链接:https://www.f2er.com/js/154257.html

猜你在找的JavaScript相关文章