0

我从互联网上下载了一个 zip 文件。我使用 XHR 请求(使用 node-webkit)接收它,这意味着 zip 的内容以字符串形式出现在 xhr.responseText 中。我现在想将此文件保存到磁盘,但是,我似乎无法将其保存为未损坏的 zip 存档。

我基本上使用过 fs.writeFile、fs.write、fs.createWriteStream,但我似乎无法正确使用。

我正在使用一个名为 AdmZip 的节点模块,它接受一个文件缓冲区,然后可以将其保存为 zip 存档。所以,我想,这可能是一种方法,但是如何从我收到的字符串中制作一个缓冲区?

顺便说一句:由于 node.js 中的错误,我无法使用 http 模块从 Internet 接收文件,因此我使用 xhr 请求。

4

1 回答 1

2

所以,我找到了一个解决方案,首先是设置xhr.responseType = 'arraybuffer'然后将响应转换为 Uint8Array。从那里我将 Uint8Array 转换为 nodejs 缓冲区,然后我可以保存它。

var arrayBuffer = xhr.response,
    byteArray = new Uint8Array(arrayBuffer);


var buffer = new Buffer(byteArray.length);

for (var i = 0; i < byteArray.length; i++) {

    buffer.writeUInt8(byteArray[i], i);

}


fs.writeFileSync(fname, buffer);
于 2014-03-13T01:56:20.567 回答