React - JSZip - zip 损坏:找不到中心目录末尾/已到达数据末尾(数据长度 = 6329,要求索引 = 7097)。拉链损坏?

问题描述 投票:0回答:1

开发人员。

我正在开发一个应用程序,在其中发送有效负载并接收 ArrayBuffer(压缩内容)作为响应,如下所示:

ArrayBuffer(6329)
byteLength:6329
detached:false
maxByteLength:6329
resizable:false
[[Prototype]]:ArrayBuffer
[[Int8Array]]:Int8Array(6329)
[[Uint8Array]]:Uint8Array(6329)
[[ArrayBufferByteLength]]:6329
[[ArrayBufferData]]:716

然后,为了解压缩内容,我使用了我能找到的唯一的 React 替代方案 - JSZip 库

我的逻辑是这样的:

try {
      const response = await API.post(
        'URL',
        formData,
        {
          maxBodyLength: Infinity,
          headers: { 'Content-Type': 'multipart/form-data' },
          responseType: 'arraybuffer'
        }
      );

      const zip = new JSZip();

      const extractedFiles = await zip.loadAsync(response.data);

      for (const [_, unzippedFile] of Object.entries(extractedFiles.files)) {
        // DO SOME LOGIC
      }
    } catch (error) {
      console.log(error);
    } finally {
      setIsLoading(false);
    }

在我的多次尝试中,我都成功解压了文件,但还有许多其他的代码在这里停止:

const extractedFiles = await zip.loadAsync(response.data);

并抛出以下错误:

Error: End of data reached (data length = 6329, asked index = 7097). Corrupted zip ?

有时是

Corrupted zip: can't find end of central directory

zip 没有损坏,我在使用相同 API 的移动版本中进行了相同的测试,并且没有错误;

此外,与桌面相比,移动设备上返回的 ArrayBuffer 长度要小得多:

ArrayBuffer(635)
byteLength:635
detached:false
maxByteLength:635
resizable:false
[[Prototype]]:ArrayBuffer
[[Int8Array]]:Int8Array(635)
[[Uint8Array]]:Uint8Array(635)
[[ArrayBufferByteLength]]:635
[[ArrayBufferData]]:702

我没有办法解决这个问题。

有人知道如何解决吗?

提前谢谢。

reactjs arraybuffer jszip
1个回答
0
投票

我也有同样的问题。你能解决吗? 如果是的话,你能解释一下方法吗?

© www.soinside.com 2019 - 2024. All rights reserved.