从Node.js中的.rar或.zip文件中提取所有文件名

时间:2018-12-21 15:11:39

标签: node.js file zip rar busboy

我有一条express路由,该路由上载文件,这些文件是通过formData发送到服务器的。

假设文件是​​.rar.zip文件,我的目标是提取所有文件名,这些文件名位于此压缩文件夹或其子文件夹中。

这是我的express路线当前的样子:

module.exports = async (req, res) => {
    try {
        const busboy = new Busboy({ headers: req.headers })
        busboy.on('finish', async () => {
            const fileData = req.files.file
            console.log(fileData)
            // upload file
            // send back response
        })
        req.pipe(busboy)
    } catch (err) { return response.error(req, res, err, 'uploadProductFile_unexpected') }
}

console.log(fileData)的外观如下:

{
    data:
        <Buffer 52 61 72 21 1a 07 01 00 56 0c 22 93 0c 01 05 08 00 07 01 01 8d d6 8d 80 00 85 76 33 e4 49 02 03 0b fc d4 0d 04 b1 8c 1e 20 bc 86 da 2e 80 13
    00 2b 66 ... >,
    name: 'filename.rar',
    encoding: '7bit',
    mimetype: 'application/octet-stream',
    truncated: false,
    size: 224136
}

filename.rar内部有一些文件,例如texture.pnginfo.txt。我的目标是获取这些名称。

2 个答案:

答案 0 :(得分:1)

您应该能够使用JSZip提供的.files函数来执行此操作。

var fs = require("fs");
var JSZip = require("jszip");

// read a zip file
fs.readFile("project.zip", function(err, data) {
    if (err) throw err;
    JSZip.loadAsync(data).then(function (zip) {
      files = Object.keys(zip.files);
      console.log(files);
    });
});

this tutorial.提供的一种此类解决方案的示例,您应该能够通过req请求对文件使用类似的功能。

答案 1 :(得分:0)

看看NodeJS File System API。显式fs.write将该缓冲区作为参数。因此,一旦有了fileData对象,就可以执行类似的操作

fs.write(fileData.name, fileData.data, (err) => {
/* handle errors and results*/
});