首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将zip文件保存为节点js中的字符串

如何将zip文件保存为节点js中的字符串
EN

Stack Overflow用户
提问于 2016-11-23 06:31:36
回答 2查看 3.8K关注 0票数 1

我收到ebay-api的回复。

--MIMEBoundaryurn_uuid_C91296EA5FF69EE9571479882375576565344内容-类型: application/xop+xml;charset=utf-8;type="text/xml“内容-传输-编码:二进制内容-ID:<0.urn:uuid:C91296EA5FF69EE9571479882375576565345> Success1.1.02016-11-23T06:26:15.576Z514 --MIMEBoundaryurn_uuid_C91296EA5FF69EE9571479882375574545344内容-类型:应用程序/压缩内容-传输-编码:二进制内容-ID: [��@�50014028337_report.xmlUT y�2 x�2 2Xux 00�R�j�@��+����PlX#�(�x,=l�qLfewc��wĤ��o��١�HT���t��GGT���6�;���‘������.$����=d����m;c}Wߦ�RW�A f�����g�i��4U��x��3��f���ғ{f��xj�,+���ۖi%5��B‘s��G,#��t,L{�c�����MD笓��)!�9�����M_o;8_��<�i�y����sz���u���=��Ջ^2�S��%+2�2�`QV�$�����~?�w�ǥ�_Q�퉦�'PKY'uIi[��@���50014028337_report.xmlUTy�2Xux00PK\��

这是字符串类型。我提取了附带的zip文件数据,即

[��@�50014028337_report.xmlUT y�2 x�2 2Xux 00�R�j�@��+����PlX#�(�x,=l�qLfewc��wĤ��o��١�HT���t��GGT���6�;���‘������.$����=d����m;c}Wߦ�RW�A f�����g�i��4U��x��3��f���ғ{f��xj�,+���ۖi%5��B‘s��G,#��t,L{�c�����MD笓��)!�9�����M_o;8_��<�i�y����sz���u���=��Ջ^2�S��%+2�2�`QV�$�����~?�w�ǥ�_Q�퉦�'PKY'uIi[��@���50014028338_report.xmlUTy�2Xux00PK\�

这表明它中有一个report.xml。因此,当我将这些数据写入zip文件时,它会创建一个zip文件,提取后会出现错误。

代码语言:javascript
复制
fs.writeFile("./static/DownloadFile.zip", fileData, 'binary', function(err){
                  if (err) throw err;
                  console.log("success");
                  });

如何正确地将这些数据写入zip文件。请指教。如果需要任何更多的信息。

编辑:我尝试用PHP编写zip文件,并成功地用以下代码编写它:

代码语言:javascript
复制
$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中实现同样的目标。

EN

回答 2

Stack Overflow用户

发布于 2020-06-18 22:22:18

取决于您正在使用的HTTP客户机,实现可能会发生一些变化。

对于axios,我所做的事情如下:

  • 我请求一个zip文件,所以我将Accept头指定为application/zip
  • 为了获得buffer而不是Binary,请将responseType指定为arrayBuffer
代码语言:javascript
复制
const res = await axios.get('/routToThat/file', {
  headers: {
    Accept: 'application/zip',
  },
  responseType: 'arraybuffer',
});

通过执行后一种方法,而不是从响应中接收Binary

代码语言:javascript
复制
A@B�ArE⏾�7�ϫ���f�걺N�����Yg���o_M^�D�T�U X_���e?� hi\...

我收到一个缓冲器:

代码语言:javascript
复制
Buffer(22781691) [80, 75, 3, …]

一旦请求被解析,并且我有了那个缓冲区,我就使用来自fs的相同的fs函数。

注意事项:我没有在writeFile中指定Encoding

代码语言:javascript
复制
fs.writeFile(name, res.data, (err) => {
  if (err) throw err;
  console.log("success");
});
票数 6
EN

Stack Overflow用户

发布于 2017-09-13 10:51:40

正如我在您的代码示例中看到的,您的二进制数据已经被请求模块破坏了。只需在请求设置中使用

代码语言:javascript
复制
encoding:null

而zip文件是正文中的有效二进制文件(现在是缓冲区,而不是utf-8字符串!)你可以减压。只要您看到问号,您仍然存在编码问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40757545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档