我收到了来自ebay-api的回复
- MIMEBoundaryurn_uuid_C91296EA5FF69EE9571479882375576565344 Content-Type:application / xop + xml;字符集= UTF-8;类型= “文本/ xml” 的 内容传输编码:二进制内容ID: < 0.urn:UUID:C91296EA5FF69EE9571479882375576565345>
Success1.1.02016-11-23T06:26:15.576Z514 --MIMEBoundaryurn_uuid_C91296EA5FF69EE9571479882375574545344内容类型:application / zip内容 - 传输 - 编码:二进制 Content-ID:
PKY'uIi [ @ 50014028337_report.xmlUTy 2Xy 2Xux 00 R j @ + [ PlX# ( x,=l q)Lfewc wĤ O 1 HT t GGT 6;” $ =分米; C ^} WߦRWA fgI4Ux3fғ{FXJ,+ I%5B'sG,#吨,L {CMD笓)!9 沫; 8_1< iyszu =Ջ^ 2 S%+ 22`QV $ 〜?wǥ_Q퉦“PKY'uIi [@ 50014028337_report.xmlUTy2Xux 00PK \ --MIMEBoundaryurn_uuid_C91296EA5FF69EE9571479882375576565344 -
这是字符串类型。我提取了附加的zip文件数据,即
PKY'uIi [ @ 50014028337_report.xmlUTy 2Xy 2Xux 00 R j @ + [ PlX# ( x,=l q)Lfewc wĤ O 1 HT t GGT 6;” $ =分米; C ^} WߦRWA fgI4Ux3fғ{FXJ,+ I%5B'sG,#吨,L {CMD笓)!9 沫; 8_1< iyszu =Ջ^ 2 S%+ 22`QV $ 〜?wǥ_Q퉦“PKY'uIi [@ 50014028338_report.xmlUTy2Xux 00PK \
这表明它中有一个report.xml。因此,当我在zip文件中写入此数据时,它会创建一个zip文件,并在提取时出错。
fs.writeFile("./static/DownloadFile.zip", fileData, 'binary', function(err){
if (err) throw err;
console.log("success");
});
如何正确地将这些数据写入zip文件中。请咨询。如果需要更多信息。
修改: 我尝试用PHP编写zip文件,并且用这段代码编写它:
$zipFilename="DownloadFile.zip";
$data = $fileData;
$handler = fopen($zipFilename, 'wb')
or die("Failed. Cannot Open $zipFilename to Write!</b></p>");
fwrite($handler, $data);
fclose($handler);
请建议我如何在nodejs中实现相同的目标。
答案 0 :(得分:3)
根据您使用的HTTP客户端的实现,可能会有一些变化。
使用axios
,我正在做类似的事情:
Accept
标头指定为application/zip
buffer
而不是Binary
,请将responseType
指定为arrayBuffer
const res = await axios.get('/routToThat/file', {
headers: {
Accept: 'application/zip',
},
responseType: 'arraybuffer',
});
通过后者,而不是从响应中接收到Binary
:
A@B�ArE⏾�7�ϫ���f�걺N�����Yg���o_M^�D�T�U X_���e?� hi\...
我收到一个缓冲区:
Buffer(22781691) [80, 75, 3, …]
请求解决后,有了缓冲区,我就使用writeFile
中相同的fs
函数
注意:我没有在Encoding
writeFile
fs.writeFile(name, res.data, (err) => {
if (err) throw err;
console.log("success");
});
答案 1 :(得分:1)
正如我在您的代码示例中看到的,您的二进制数据已被请求模块损坏。只需在请求设置中使用
encoding:null
并且zip文件是正文中的有效二进制文件(现在是缓冲区而不是utf-8字符串!),您可以解压缩。只要您看到问题标记,您仍然会遇到编码问题。