Извлеките все имена файлов из файла .rar или .zip в Node.js - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть маршрут 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.png и info.txt.И моя цель - получить эти имена.

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Взгляните на NodeJS File System API.Явно fs.write , который принимает буфер в качестве аргумента.Так что, получив объект fileData, вы можете сделать что-то вроде

fs.write(fileData.name, fileData.data, (err) => {
/* handle errors and results*/
});
0 голосов
/ 21 декабря 2018

Вы должны быть в состоянии сделать это с помощью функции .files, доступной с помощью JSZip.

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);
    });
});

является примером одного такого решения, любезно предоставленного этого руководства. Вы можете использовать аналогичную функцию для вашего файла из запроса req.

...