0

我正在使用谷歌云存储。此代码将在存储桶中保存一个对象,但它只是空的。它显示大小为 0 字节

req.file = req.files.file;
const bucketName = req.body.bucketName || DEFAULT_BUCKET_NAME;
const bucket = storage.bucket(bucketName);
const gcsFileName = `${Date.now()}-${req.file.name}`;
const file = bucket.file(gcsFileName);
const stream = file.createWriteStream({
  // resumable: false, 
  // gzip: true,
  metadata: {
      contentType: req.file.mimetype,
    },
});

stream.on('error', (err) => {
  req.file.cloudStorageError = err;
    next(err)
});
stream.on('finish', () => {
    console.log('image uploaded succesfully')
    req.file.cloudStorageObject = gcsFileName;
  return file.makePublic()
    .then(() => {
      req.file.gcsUrl = gcsHelpers.getPublicUrl(bucketName, gcsFileName);
      next()
    });
});

stream.end(req.files.file.buffer);
4

1 回答 1

5

通过评论,发现问题在于对 GCS 的写入没有通过预期的数据,导致没有写入任何内容。在原始代码中,我们有:

stream.end(req.files.file.buffer);

在将数据写入变量后会关闭文件。但是,变量的标识不正确,应该编码的是:

stream.end(req.files.file.data);
于 2020-06-03T20:38:48.997 回答