Node.js - получение пустых файлов при распаковке и загрузке в GCS - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь создать службу, которая получает zip-файл, распаковывает его и загружает его содержимое в корзину Google Cloud Storage.Часть распаковки, кажется, работает хорошо, но в моем GCS-хранилище все файлы кажутся пустыми.Я использую следующий код:

app.post('/fileupload', function(req, res) {
var form = new formidable.IncomingForm();
form.parse(req, function (err, fields, files) {

    const uuid = uuidv4();

    console.log(files.filetoupload.path); // temporary path to zip

    fs.createReadStream(files.filetoupload.path)
        .pipe(unzip.Parse())
        .on('entry', function (entry) {
            var fileName = entry.path;
            var type = entry.type; // 'Directory' or 'File'
            var size = entry.size;

            const gcsname = uuid + '/' + fileName;
            const blob = bucket.file(gcsname);

            const blobStream = blob.createWriteStream(entry.path);
            blobStream.on('error', (err) => {
                console.log(err);
            });

            blobStream.on('finish', () => {
                const publicUrl = format(`https://storage.googleapis.com/${bucket.name}/${blob.name}`);
                console.log(publicUrl); // file on GCS
            });

            blobStream.end(entry.buffer);

        });

    });
});

Я довольно новичок в Node.js, поэтому я, возможно, что-то упускаю из виду - я потратил некоторое время на документацию, но я не совсем понимаю, чтосделать.Может кто-нибудь посоветовать, в чем может быть проблема?

1 Ответ

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

fs.createWriteStream () принимает путь к файлу в качестве аргумента, но GCS createWriteStream () принимает параметры

В соответствии с примером в этой документации рекомендуемый способ будетбыть:

const stream = file.createWriteStream({
    metadata: {
      contentType: req.file.mimetype
    },
    resumable: false
  });

вместо:

const blobStream = blob.createWriteStream(entry.path).

...