开发人员。
我正在开发一个应用程序,在其中发送有效负载并接收 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
我没有办法解决这个问题。
有人知道如何解决吗?
提前谢谢。
我也有同样的问题。你能解决吗? 如果是的话,你能解释一下方法吗?