【问题标题】:How to upload images to GCS bucket with multer and NodeJS?如何使用 multer 和 NodeJS 将图像上传到 GCS 存储桶?
【发布时间】:2019-04-30 23:32:18
【问题描述】:

我在将本地图片上传到我的谷歌云存储时遇到问题。

我已经尝试了两种方法。第一个是用multer上传

var storage = multer.diskStorage({
    destination: (req, file, cb) => {
      cb(null, './uploads/')
    },
    filename: (req, file, cb) => {
      cb(null, file.fieldname + '-' + Date.now())
    }
});
var upload = multer({storage: storage}).single('image'); 

app.post('/upload',function(req,res,next){
  upload(req,res,(err) => {
    if(err){
      console.log(err)
    }else{
      console.log(req.file)
    }
  })

})

然后,我直接用 GCS 试过了

var bucket = admin.storage().bucket('mybucket')
app.post('/upload',function(req,res,next){
 bucket
.save(file)
.then(() => {



})

对于这两种解决方案,req.files 始终是 undefinedreq.body 是这样的缓冲区:

<Buffer 2d 2d 2d 2d ...>

当我尝试将此缓冲区保存在我的 GCS 存储桶中时,我的存储桶中创建了 .jpg/png 文件,但它已损坏。

我正在浏览网页寻找解决方案,但没有发现任何可以帮助我克服这种情况的东西。

有什么建议吗?

【问题讨论】:

标签: node.js google-cloud-platform google-cloud-storage image-uploading multer


【解决方案1】:

确保您已将enctype="multipart/form-data" 属性添加到您的表单。 req.files 成为 undefined 的可能原因。

【讨论】:

    【解决方案2】:

    如果您有其他表单值,您需要 multer、multer-google-storage 和当然 bodyParser。您需要在 multipart/form-data 中发送数据

    在你的 .env 文件中

    GCS_BUCKET = <bucket name>
    GCLOUD_PROJECT = <project id>
    GCS_KEYFILE = <key file location>
    

    您可以从 GCP Console>Your Project>I AM & Admin>Service Accounts 下载密钥文件

    在你的路线中

    const multer = require('multer');
    const multerGoogleStorage = require("multer-google-storage");
    
    var uploadHandler = multer({
      storage: multerGoogleStorage.storageEngine()
    });
    
    router.post('/', uploadHandler.single('image'), function (req, res, next) {
      const body = req.body;
      res.json({fileName: req.file.filename});
      res.end();
    

    }

    这会将文件存储到 GCS,名称为 [random-string-generated-by-gcs]_[YOUR FILE NAME WITH EXTENTION]。同样可以通过req.file.filename在路由下访问。

    Documentation

    【讨论】:

    • 嗨,它是否知道 GCS 密钥等在 dotenv 文件中?因为我有一个错误:EISDIR:对目录的非法操作
    • 它记录在这里npmjs.com/package/multer-google-storage#default-method。您面临的错误与 Google 云存储无关。 npm stackoverflow.com/questions/34959038/…
    • 嗨兄弟@imjoymhnt,我是给出答案并添加评论的同一个人。答案有 4 票赞成。答案有答案... :)
    • 你能告诉我在哪里传递项目 ID、存储桶名称、密钥文件等凭据。我不想将它们存储在我的系统环境中。那么还有其他解决方案吗? bcz 你在这里没有通过任何凭证。
    猜你喜欢
    • 2019-06-12
    • 2022-11-04
    • 2021-11-03
    • 1970-01-01
    • 2018-03-11
    • 2020-09-17
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多