【问题标题】:Weird error when uploading file to Google Cloud Storage with Multer使用 Multer 将文件上传到 Google Cloud Storage 时出现奇怪的错误
【发布时间】:2021-01-07 16:14:58
【问题描述】:

这是我的功能

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)

【问题讨论】:

    标签: javascript node.js express multer


    【解决方案1】:

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

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

    ,我用过

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 2021-01-05
      • 1970-01-01
      • 2014-02-28
      • 2013-06-16
      • 2016-01-08
      相关资源
      最近更新 更多