如何在 Node js 中保存表示为字符串的 zip 文件

Ama*_*pta 1 javascript php mime node.js ebay-api

我收到了来自 ebay-api 的回复

\n\n
\n

--MIMEBoundaryurn_uuid_C91296EA5FF69EE9571479882375576​​565344 内容类型:application/xop+xml;字符集=utf-8;类型 =“text/xml”\n 内容传输编码:二进制内容 ID:\n <0.urn:uuid:C91296EA5FF69EE9571479882375576​​565345>

\n\n

Success1.1.02016-11-23T06:26:15.576Z514\n --MIMEBoundaryurn_uuid_C91296EA5FF69EE9571479882375574545344 内容类型:application/zip 内容传输编码:二进制\n 内容 ID:

\n\n

PKY\'uIi[\xef\xbf\xbd\xef\xbf\xbd@\xef\xbf\xbd50014028337_report.xmlUT y\xef\xbf\xbd2Xy\xef\xbf\xbd2Xux\n 00\xef\xbf\xbdR\xef \xbf\xbdj\xef\xbf\xbd@\xef\xbf\xbd\xef\xbf\xbd+\xef\xbf\xbd\xef\xbf\xbd[\xef\xbf\xbd\xef\xbf\xbdPlX#\ xef\xbf\xbd(\xef\xbf\xbdx,=l\xef\xbf\xbdq)Lfewc\xef\xbf\xbd\xef\xbf\xbdw\xc4\xa4\xef\xbf\xbd\xef\xbf\ xbdO\xef\xbf\xbd\xef\xbf\xbd\xd9\xa1\xef\xbf\xbdHT\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdt\xef\xbf\xbd\xef\ xbf\xbdGGT\xef\xbf\xbd\n\xef\xbf\xbd\xef\xbf\xbd6\xef\xbf\xbd;\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\' \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd.$\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd=d\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdm;c}W\xdf\xa6\xef\xbf \xbdRW\xef\xbf\xbdA\nf\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdg\xef\xbf\xbdI\xef\xbf \xbd\xef\xbf\xbd4U\xef\xbf\xbd\xef\xbf\xbdx\xef\xbf\xbd\xef\xbf\xbd3\xef\xbf\xbd\xef\xbf\xbdf\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xd2\x93{f\xef\xbf\xbd\xef\xbf\xbdxj\xef\xbf\xbd,+\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xdb\x96I%5\xef\xbf\xbd\xef\xbf\xbdB\'s\xef\xbf\xbd\xef\xbf\xbdG,#\xef\xbf\xbd\xef\ xbf\xbdt,L{\xef\xbf\xbdc\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdMD\xe7\xac\x93\xef \xbf\xbd\xef\xbf\xbd)!\xef\xbf\xbd9\xef\xbf\xbd\xef\xbf\xbd\n \xef\xbf\xbdM\xef\xbf\xbdo;8_\xef\xbf \xbd\xef\xbf\xbd<\xef\xbf\xbdi\xef\xbf\xbdy\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdsz\xef\xbf\ xbd\xef\xbf\xbd\xef\xbf\xbdu\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd=\xef\xbf\xbd\xef\xbf\xbd\xd5\x8b^2 \xef\xbf\xbdS\xef\xbf\xbd\xef\xbf\xbd%+2\xef\xbf\xbd2\xef\xbf\xbd`QV\xef\xbf\xbd$\xef\xbf\xbd\xef \xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd~?\xef\xbf\xbdw\xef\xbf\xbd\xc7\xa5\xef\xbf\xbd_Q\xef\xbf \xbd\xed\x89\xa6\xef\xbf\xbd\'PKY\'uIi[\xef\xbf\xbd\xef\xbf\xbd@\xef\xbf\xbd\xef\xbf\xbd\xef\xbf \xbd50014028337_report.xmlUTy\xef\xbf\xbd2Xux\n 00PK\\\xef\xbf\xbd\n --MIMEBoundaryurn_uuid_C91296EA5FF69EE9571479882375576​​565344--

\n
\n\n

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

\n\n
\n

PKY\'uIi[\xef\xbf\xbd\xef\xbf\xbd@\xef\xbf\xbd50014028337_report.xmlUT y\xef\xbf\xbd2Xy\xef\xbf\xbd2Xux\n 00\xef\xbf\xbdR\xef \xbf\xbdj\xef\xbf\xbd@\xef\xbf\xbd\xef\xbf\xbd+\xef\xbf\xbd\xef\xbf\xbd[\xef\xbf\xbd\xef\xbf\xbdPlX#\ xef\xbf\xbd(\xef\xbf\xbdx,=l\xef\xbf\xbdq)Lfewc\xef\xbf\xbd\xef\xbf\xbdw\xc4\xa4\xef\xbf\xbd\xef\xbf\ xbdO\xef\xbf\xbd\xef\xbf\xbd\xd9\xa1\xef\xbf\xbdHT\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdt\xef\xbf\xbd\xef\ xbf\xbdGGT\xef\xbf\xbd\n\xef\xbf\xbd\xef\xbf\xbd6\xef\xbf\xbd;\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\' \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd.$\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd=d\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdm;c}W\xdf\xa6\xef\xbf \xbdRW\xef\xbf\xbdA\nf\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdg\xef\xbf\xbdI\xef\xbf \xbd\xef\xbf\xbd4U\xef\xbf\xbd\xef\xbf\xbdx\xef\xbf\xbd\xef\xbf\xbd3\xef\xbf\xbd\xef\xbf\xbdf\xef\xbf\xbd \xef\xbf\xbd\xef\xbf\xbd\xd2\x93{f\xef\xbf\xbd\xef\xbf\xbdxj\xef\xbf\xbd,+\xef\xbf\xbd\xef\xbf\xbd \xef\xbf\xbd\xdb\x96I%5\xef\xbf\xbd\xef\xbf\xbdB\'s\xef\xbf\xbd\xef\xbf\xbdG,#\xef\xbf\xbd\xef\ xbf\xbdt,L{\xef\xbf\xbdc\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdMD\xe7\xac\x93\xef \xbf\xbd\xef\xbf\xbd)!\xef\xbf\xbd9\xef\xbf\xbd\xef\xbf\xbd\n \xef\xbf\xbdM\xef\xbf\xbdo;8_\xef\xbf \xbd\xef\xbf\xbd<\xef\xbf\xbdi\xef\xbf\xbdy\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdsz\xef\xbf\ xbd\xef\xbf\xbd\xef\xbf\xbdu\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd=\xef\xbf\xbd\xef\xbf\xbd\xd5\x8b^2 \xef\xbf\xbdS\xef\xbf\xbd\xef\xbf\xbd%+2\xef\xbf\xbd2\xef\xbf\xbd`QV\xef\xbf\xbd$\xef\xbf\xbd\xef \xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd~?\xef\xbf\xbdw\xef\xbf\xbd\xc7\xa5\xef\xbf\xbd_Q\xef\xbf \xbd\xed\x89\xa6\xef\xbf\xbd\'PKY\'uIi[\xef\xbf\xbd\xef\xbf\xbd@\xef\xbf\xbd\xef\xbf\xbd\xef\xbf \xbd50014028338_report.xmlUTy\xef\xbf\xbd2Xux\n 00PK\\\xef\xbf\xbd

\n
\n\n

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

\n\n
fs.writeFile("./static/DownloadFile.zip", fileData, \'binary\', function(err){\n                  if (err) throw err;\n                  console.log("success");\n                  });\n
Run Code Online (Sandbox Code Playgroud)\n\n

我怎样才能正确地将这些数据写入 zip 文件中。请建议。如果需要更多信息。

\n\n

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

\n\n
$zipFilename="DownloadFile.zip";\n        $data       =   $fileData;\n        $handler = fopen($zipFilename, \'wb\')\n            or die("Failed. Cannot Open $zipFilename to Write!</b></p>");\n        fwrite($handler, $data);\n        fclose($handler);\n
Run Code Online (Sandbox Code Playgroud)\n\n

请告诉我如何在nodejs中实现同样的事情。

\n

Mau*_*eal 6

根据您使用的 HTTP 客户端,实现可能会略有变化。

\n\n

我正在axios做这样的事情:

\n\n
    \n
  • 我正在请求一个 zip 文件,因此我将Accept标头指定为application/zip
  • \n
  • 为了获得 abuffer和 not Binary,请指定responseTypeasarrayBuffer
  • \n
\n\n
const res = await axios.get(\'/routToThat/file\', {\n  headers: {\n    Accept: \'application/zip\',\n  },\n  responseType: \'arraybuffer\',\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n

通过执行后者,而不是Binary从响应中接收:

\n\n
A@B\xef\xbf\xbdArE\xe2\x8f\xbe\xef\xbf\xbd7\xef\xbf\xbd\xcf\xab\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdf\xef\xbf\xbd\xea\xb1\xbaN\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdYg\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdo_M^\xef\xbf\xbdD\xef\xbf\xbdT\xef\xbf\xbdU X_\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbde?\xef\xbf\xbd hi\\...\n
Run Code Online (Sandbox Code Playgroud)\n\n

我收到一个缓冲区:

\n\n
Buffer(22781691) [80, 75, 3, \xe2\x80\xa6]\n
Run Code Online (Sandbox Code Playgroud)\n\n

一旦请求得到解决并且我有了该缓冲区,我就使用writeFile来自fs

\n\n

注意:我没有Encoding指定writeFile

\n\n
fs.writeFile(name, res.data, (err) => {\n  if (err) throw err;\n  console.log("success");\n});\n
Run Code Online (Sandbox Code Playgroud)\n