Node.js-解压缩并上传到GCS时获取空文件

时间:2018-11-29 11:20:56

标签: javascript node.js google-cloud-storage unzip

我正在尝试创建一个获取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很陌生,所以我可能忽略了一些东西-我花了一些时间在文档上,但是我不知道该怎么做。 有人可以建议出什么问题吗?

2 个答案:

答案 0 :(得分:1)

fs.createWriteStream()以文件路径作为参数,而GCS createWriteStream()以options

按照此documentation中的示例,推荐的方式为:

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

代替:

const blobStream = blob.createWriteStream(entry.path)

答案 1 :(得分:0)

检查缓冲区是否未定义。可能由于未指定的磁盘/内存存储而导致缓冲区未定义。