【问题标题】:Uploading a zip file directly to s3 from browser after unzipping it at browser在浏览器解压缩后从浏览器直接将 zip 文件上传到 s3
【发布时间】:2018-11-12 05:47:12
【问题描述】:

我有一个反应环境,我将小块文件上传到 s3。现在我也应该从浏览器本身上传 zip,但处于解压缩状态。经过大量发现,我制定了以下内容,

jsZip.loadAsync(zipFileAsBuffer).then(function (zip) {
            Object.keys(zip.files).forEach(function (filename) {
                console.log(filename)
                zip.files[filename].async('string').then(function (fileData) {

                })
            })
        })

稍后,当我为分块执行 fileData.byteLength 时,它给出了一个错误,提示找不到未定义的字节长度。我认为这是因为我正在使用的进程需要缓冲区,但我从 jsZip 获得了 blob。如何将 blob 转换为缓冲区,或者如果需要更好的方法,请告知。

【问题讨论】:

  • 您想解压缩 zip 文件的内容,然后上传该 zip 文件中的每个文件,对吗?
  • @Aravind 是的。
  • 猜你需要将承诺链接到一个更高的级别。或者为了简化它首先解压缩到一个文件夹,然后遍历所有文件然后上传。
  • @Aravind 存储在文件夹中对我来说不是一个选项 :) 。此外,一旦上传文件,文件链接就会到位,而不是我收到错误。
  • 可能是这种情况,因为整个 zip 文件都在内存中,并且个别文件无法完全供您使用。您可以尝试的另一种选择是上传 zip 文件并通过 lambda 函数(zip 文件上传触发器)解压缩它们,以便您可以解耦解压缩和上传功能。

标签: reactjs amazon-web-services zip jszip


【解决方案1】:

我需要在现有代码中进行的唯一更改是使用“ArrayBuffer”而不是“string”。所以修改看起来像,

jsZip.loadAsync(zipFileAsBuffer).then(function (zip) {
        Object.keys(zip.files).forEach(function (filename) {
            console.log(filename)
            zip.files[filename].async('ArrayBuffer').then(function (fileData) {

            })
        })
    })

【讨论】:

    猜你喜欢
    • 2013-09-06
    • 2023-04-05
    • 2016-03-27
    • 2013-04-25
    • 1970-01-01
    • 2017-05-04
    • 2013-03-18
    • 1970-01-01
    • 2018-04-12
    相关资源
    最近更新 更多