奇怪的错误时,上传文件到谷歌云存储Multer

时间:2021-01-07 16:14:58

标签: javascript node.js express multer

这是我的职责

app.post("/pet", upload.single('file'), async (req, res, next) => {
  if(!req.file) {
    res.status(400).send('No file uploaded')
  }
  const blob = petAdoptionBucket.file(req.file.originalname)
  const blobStream = blob.createWriteStream()
  blobStream.on('error', err => {
    next(err)
  })

  blobStream.on('finish', () => {
    const publicUrl = format(
      `https://storage.googleapis.com/${petAdoptionBucket.name}/${blob.name}`
    );
    res.status(200).send(publicUrl);
  });

  blobStream.end(req.file.buffer)
})

在功能工作和文件会出现在我的GCS桶,但我有一个500内部服务器错误称的路径名应该是一个对象,而不是一个字符串。 (关于在blobStrea.on publicUrl变量())

有人可以告诉我为什么?

下面是,我发现了错误

TypeError [ERR_INVALID_ARG_TYPE]: The "pathObject" argument must be of type object. Received type string ('https://storage.googleap...)
        at _format (path.js:117:11)
        at Pumpify.<anonymous> (/home/burslf/langages/NodeJS/pet-adoption/backend/server.js:156:23)
        at Pumpify.emit (events.js:314:20)
        at finishMaybe (/home/burslf/langages/NodeJS/pet-adoption/backend/node_modules/@google-cloud/storage/node_modules/readable-stream/lib/_stream_writable.js:624:14)
        at afterWrite (/home/burslf/langages/NodeJS/pet-adoption/backend/node_modules/@google-cloud/storage/node_modules/readable-stream/lib/_stream_writable.js:470:3)
        at onwrite (/home/burslf/langages/NodeJS/pet-adoption/backend/node_modules/@google-cloud/storage/node_modules/readable-stream/lib/_stream_writable.js:461:7)
        at Pumpify.WritableState.onwrite (/home/burslf/langages/NodeJS/pet-adoption/backend/node_modules/@google-cloud/storage/node_modules/readable-stream/lib/_stream_writable.js:160:5)
        at Object.onceWrapper (events.js:420:28)
        at Pumpify.emit (events.js:314:20)
        at Pumpify.Duplexify.uncork (/home/burslf/langages/NodeJS/pet-adoption/backend/node_modules/@google-cloud/storage/node_modules/duplexify/index.js:79:50)
        at Duplexify.<anonymous> (/home/burslf/langages/NodeJS/pet-adoption/backend/node_modules/@google-cloud/storage/build/src/file.js:1404:20)
        at Duplexify.emit (events.js:314:20)
        at Upload.<anonymous> (/home/burslf/langages/NodeJS/pet-adoption/backend/node_modules/@google-cloud/storage/build/src/file.js:2966:17)
        at Upload.emit (events.js:326:22)
        at finishMaybe (/home/burslf/langages/NodeJS/pet-adoption/backend/node_modules/gcs-resumable-upload/node_modules/readable-stream/lib/_stream_writable.js:624:14)
        at afterWrite (/home/burslf/langages/NodeJS/pet-adoption/backend/node_modules/gcs-resumable-upload/node_modules/readable-stream/lib/_stream_writable.js:470:3)

1 个答案:

答案 0 :(得分:0)

找到了。 publicUrl 是 format() 所以它需要一个对象 而不是字符串

publicUrl = format(
`https://storage.googleapis.com/${petAdoptionBucket.name}/${blob.name}`
)

,我用过

publicUrl = format({
path: `https://storage.googleapis.com/${petAdoptionBucket.name}/${blob.name}`
})