【问题标题】:how to convert base64 to a zipped file using javascript?如何使用 javascript 将 base64 转换为压缩文件?
【发布时间】:2020-04-02 21:14:37
【问题描述】:

我有这种格式,我想将其转换为压缩文件并使用 javascript 解压缩该文件。当我转换这个https://base64.guru/converter/decode/file?fbclid=IwAR3X1qwrnSLTw9cHT9iKl5HxiCRmKG5l0tForN3Odraz_4pYsYApoVprEJE 时,它会给出一个压缩文件,我必须解压缩文件以增加数据

{
    "awslogs": {
        "data": "H4sIAAAAAAAAAFVSUU/bMBD+K5FfR8B2YsfuW0UZYhobouVpQZPjXKm1xKlstwgh/jsXF7RNeXB8d9/33X2+VzJCjOYJNi97IAuyWm6Wv2+v1uvl9RU5I9Ozh4BhQRvJZcNkoxmGh+npOkyHPWaijxeHWIKJqWQX/9ZdrFwAm+4O3eDibjPd7SYPPw5jh4yZYp0CmBE5OgBLueSlrVVd1n1vyg4aW+oOaslVzSvbIyQeumiD2yc3+a9uSBAiWfwiLX7kMTNeHcGnOfhKXI/ElaikYFJKraimnGu8VqKRjeBMKdnUNeNVVeFZM6qU0oIJyXmNYsmhMcmMOCMTSiiuNGdYdPZpGNK/tsRPyW2dNXNPLVlg5CN90+O1JbavVKe1KY3lUIotE2UnQZWwlaIxdS+l1S05a//qZRinnJa0LikvGF9Qtqj0OZVY+YalPQzuCOHlpLefbb00ITgIGXuPaeMtFN/cVNz47WSncSy+u9El6IuyWMGwc1lz9BYRSjT47/PD/Nzentq/MyFFTLKsF5PznyO25ItmjVZca1pJnon2wVm48Q/rFRbQc4pWVxiOY5zXKoM2wfho7ExihpO6ndVrKjLBdHQ9hHuI+8nHE+SjlWJnYoEr4gtjLeznIbqXIo+defpnGIYN2nebG5b8/9iDT25YwRE7XNo/WIEbUM82otvpELPS+uHyEnce7SVvj2/vK7R2rRQDAAA="
    }
}

【问题讨论】:

  • 它不提供压缩文件。前几个字节是3a8ccc29,这不是我所知道的任何文件的签名。
  • 我已经更新了示例

标签: javascript node.js


【解决方案1】:

我们可以使用 node 的 zlibbuffer 模块来解析为 base64 和 gunzip:

const zlib = require("zlib");
function unzip(str) {
    return new Promise((res, rej) => {
        // we read in the base64
        const data = Buffer.from(str, "base64");
        // we create a transform string to gunzip it
        const gzip = zlib.createGunzip();
        // initialize ret with an empty buffer
        let ret = Buffer.alloc(0);
        gzip.on("data", function(dat) {
            // concatenate the data to ret
            ret = Buffer.concat([ret, dat], res.length + dat.length);
        });
        gzip.on("error", function(err) {
            rej(err);
        });
        gzip.on("end", function() {
            // we're done, resolve the promise
            res(ret);
        });
        // send the data to the gunzip stream
        gzip.end(data);
    });
}

const data = "H4sIAAAAAAAAAFVSUU/bMBD+K5FfR8B2YsfuW0UZYhobouVpQZPjXKm1xKlstwgh/jsXF7RNeXB8d9/33X2+VzJCjOYJNi97IAuyWm6Wv2+v1uvl9RU5I9Ozh4BhQRvJZcNkoxmGh+npOkyHPWaijxeHWIKJqWQX/9ZdrFwAm+4O3eDibjPd7SYPPw5jh4yZYp0CmBE5OgBLueSlrVVd1n1vyg4aW+oOaslVzSvbIyQeumiD2yc3+a9uSBAiWfwiLX7kMTNeHcGnOfhKXI/ElaikYFJKraimnGu8VqKRjeBMKdnUNeNVVeFZM6qU0oIJyXmNYsmhMcmMOCMTSiiuNGdYdPZpGNK/tsRPyW2dNXNPLVlg5CN90+O1JbavVKe1KY3lUIotE2UnQZWwlaIxdS+l1S05a//qZRinnJa0LikvGF9Qtqj0OZVY+YalPQzuCOHlpLefbb00ITgIGXuPaeMtFN/cVNz47WSncSy+u9El6IuyWMGwc1lz9BYRSjT47/PD/Nzentq/MyFFTLKsF5PznyO25ItmjVZca1pJnon2wVm48Q/rFRbQc4pWVxiOY5zXKoM2wfho7ExihpO6ndVrKjLBdHQ9hHuI+8nHE+SjlWJnYoEr4gtjLeznIbqXIo+defpnGIYN2nebG5b8/9iDT25YwRE7XNo/WIEbUM82otvpELPS+uHyEnce7SVvj2/vK7R2rRQDAAA=";
// this uses promises for asynchronous execution
unzip(data).then(v => console.log(v.toString("utf8")));

【讨论】:

  • zlib 和缓冲区都内置在节点中,因此它尽可能远离库。
  • 实际上我必须在 aws lambda 中运行此代码,所以我是 aws lambda 的新手,我不知道如何导入库,这就是我问你的原因
  • 它们内置于节点中:您不必拥有任何额外的库。
  • 但我必须使用 npm 安装 zlib 并且必须要求在本地运行
  • 不,你不知道,zlib 是内置在节点中的。是的,你必须要求它。不,您不必下载它。
猜你喜欢
  • 1970-01-01
  • 2016-07-16
  • 2015-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-29
  • 2014-08-07
相关资源
最近更新 更多