使用Node.js从base64编码的文件中写入zip文件

4

我正在将base64编码的值写入zip文件。以下是我使用的写入代码:

var base64Data  =   base64_encoded_value;
base64Data  +=  base64Data.replace('+', ' ');
binaryData  =   new Buffer(base64Data, 'base64').toString('binary');

fs.writeFile('test.zip', binaryData, "binary", function (err) {
    console.log(err); // writes out file without error
});

代码已经运行成功,创建了test.zip文件,但问题是当我试图解压它时,出现了以下错误:

End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of /home/user/Node/project/public/media/written/zip4045508057.zip or
        /home/user/Node/project/public/media/written/zip4045508057.zip.zip, and cannot find /home/user/Node/project/public/media/written/zip4045508057.zip.ZIP, period.

有没有办法做到这一点?
2个回答

2
您需要将 base64 转换为 utf8 格式。然后您可以使用转换后的数据来写入文件。
尝试使用以下函数将 base64 字符串转换为 utf8
/**
 * @param b64string {String}
 * @returns {Buffer}
 */
function _decodeBase64ToUtf8(b64string) {
    var buffer;
    if (typeof Buffer.from === "function") {
        // Node 5.10+
        buffer = Buffer.from(b64string, 'base64');
    } else {
        // older Node versions
        buffer = new Buffer(b64string, 'base64');
    }

    return buffer;
}

我使用这个工具创建了一个ZIP文件,其中包含base64数据。


0

从base64字符串中提取.zip文件的另一种方法是使用npm包mws-extract-document

const mwsExtract = require('mws-extract-document');

const dist = './folder/to/document.zip';
const base64String = ''; //located at PdfDocument data response from MWS api.

// PROMISE
mwsExtract(base64String, dist)
          .then((msg)=>{
            // file saved. do something here...
            console.log(msg);
          })
          .catch(err)=>{
            console.log(err);
          });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接