将客户端生成的数据成块保存为JavaScript中的文件

大卫·费勒

我正在使用webRTC开发FileShare应用程序。我想用JavaScript / HTML实现客户端。该代码应在客户端浏览器上运行。通过webRTC下载时,我需要保存它们。这些文件可能很大,在将它们另存为磁盘之前,我无法完全卸载它们并将它们保存在数组或blob中。

是否有任何API允许我在收到文件时将文件分块保存?

到目前为止我已经找到DownloadifyFileSave.jshtml5 FileWriterApi尽管前两个没有分块,并且要求我先将完整文件下载到内存中才能保存,但大多数浏览器都不提供FileWriterAPI。

阿米泰·杜波(Amitay Dobo)

正如@ 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()方法执行类似的操作

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将文件保存在客户端的内存中

来自分类Dev

如何将.xlsx数据保存为Blob文件

来自分类Dev

将文件字段保存为 None 但反映数据库中的空字符串

来自分类Dev

寻找将客户端生成的二进制文件保存到客户端计算机

来自分类Dev

轻松将客户端JS中生成的内容保存到Google云端硬盘中的文件中

来自分类Dev

轻松将客户端JS中生成的内容保存到Google云端硬盘中的文件中

来自分类Dev

HTML中的XML,然后将XML保存为文件?

来自分类Dev

将结果保存为插入文件Toad中

来自分类Dev

将当前时间保存为 Javascript 中的 cookie

来自分类Dev

将SXSSF保存为.xls文件

来自分类Dev

将连接保存为CSV文件

来自分类Dev

将 javaRDD 保存为 XML 文件

来自分类Dev

将 .mjpeg 文件的十六进制数据保存为 C# 中的 .mjpeg 格式文件

来自分类Dev

将请求中的数据(八位字节流)保存为 Excel 文件会导致文件损坏

来自分类Dev

如何从客户端浏览器中的内容生成并提示保存文件?

来自分类Dev

如何将画布图像保存为数据库并生成 url

来自分类Dev

从Servicestack api元数据/ swagger生成JavaScript客户端

来自分类Dev

将文件夹中的.xlsx文件保存为.csv文件

来自分类Dev

如何在JavaScript中在客户端保存/持久化和访问数据?

来自分类Dev

将文件中的行数保存为批处理文件中的变量

来自分类Dev

如果Derby仅是客户端/服务器,如何将数据库文件保存在特定的文件夹中?

来自分类Dev

您可以使用ngCordova将base64数据保存为文件吗?

来自分类Dev

Spark没有将数据框保存为Parquet文件

来自分类Dev

与groupBy聚合后将pyspark数据帧保存为csv文件

来自分类Dev

使用 reportlab 生成的 pdf 文件,保存为纯文本

来自分类Dev

如何将列表框中的文件保存为.txt文件?

来自分类Dev

如何在Python 3.4中将JSON中的推文保存为txt文件?

来自分类Dev

如何在向客户端发送消息时强制 Openfire 请求确认,如果没有,则返回保存为离线

来自分类Dev

如何使用Laravel将JSON元素保存为数据库中的记录?

Related 相关文章

  1. 1

    将文件保存在客户端的内存中

  2. 2

    如何将.xlsx数据保存为Blob文件

  3. 3

    将文件字段保存为 None 但反映数据库中的空字符串

  4. 4

    寻找将客户端生成的二进制文件保存到客户端计算机

  5. 5

    轻松将客户端JS中生成的内容保存到Google云端硬盘中的文件中

  6. 6

    轻松将客户端JS中生成的内容保存到Google云端硬盘中的文件中

  7. 7

    HTML中的XML,然后将XML保存为文件?

  8. 8

    将结果保存为插入文件Toad中

  9. 9

    将当前时间保存为 Javascript 中的 cookie

  10. 10

    将SXSSF保存为.xls文件

  11. 11

    将连接保存为CSV文件

  12. 12

    将 javaRDD 保存为 XML 文件

  13. 13

    将 .mjpeg 文件的十六进制数据保存为 C# 中的 .mjpeg 格式文件

  14. 14

    将请求中的数据(八位字节流)保存为 Excel 文件会导致文件损坏

  15. 15

    如何从客户端浏览器中的内容生成并提示保存文件?

  16. 16

    如何将画布图像保存为数据库并生成 url

  17. 17

    从Servicestack api元数据/ swagger生成JavaScript客户端

  18. 18

    将文件夹中的.xlsx文件保存为.csv文件

  19. 19

    如何在JavaScript中在客户端保存/持久化和访问数据?

  20. 20

    将文件中的行数保存为批处理文件中的变量

  21. 21

    如果Derby仅是客户端/服务器,如何将数据库文件保存在特定的文件夹中?

  22. 22

    您可以使用ngCordova将base64数据保存为文件吗?

  23. 23

    Spark没有将数据框保存为Parquet文件

  24. 24

    与groupBy聚合后将pyspark数据帧保存为csv文件

  25. 25

    使用 reportlab 生成的 pdf 文件,保存为纯文本

  26. 26

    如何将列表框中的文件保存为.txt文件?

  27. 27

    如何在Python 3.4中将JSON中的推文保存为txt文件?

  28. 28

    如何在向客户端发送消息时强制 Openfire 请求确认,如果没有,则返回保存为离线

  29. 29

    如何使用Laravel将JSON元素保存为数据库中的记录?

热门标签

归档