【问题标题】:Extract All File Names from a .rar or .zip File in Node.js从 Node.js 中的 .rar 或 .zip 文件中提取所有文件名
【发布时间】:2018-12-21 15:11:38
【问题描述】:

我有一个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。我的目标是获取这些名称。

【问题讨论】:

    标签: node.js file zip rar busboy


    【解决方案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 请求对您的文件使用类似的功能。

    【讨论】:

    • 这对.zip 文件非常有用。但是.rar 文件会抛出错误
    • 嗯,有道理。您可以尝试使用 unrar 并根据文件扩展名单独处理它们。 npmjs.com/package/unrar
    • 我也想过这个,但是这个包好像挺冷门的。保存好用吗?
    【解决方案2】:

    看看NodeJS File System API。明确地fs.write 将缓冲区作为参数。所以一旦你有了fileData 对象,你就可以做类似的事情

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

    【讨论】:

      猜你喜欢
      • 2019-05-23
      • 1970-01-01
      • 2015-11-09
      • 1970-01-01
      • 1970-01-01
      • 2014-10-13
      • 2017-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多