最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

如何通过Multer和NodeJS将图像上传到GCS存储桶?

运维笔记admin8浏览0评论

如何通过Multer和NodeJS将图像上传到GCS存储桶?

如何通过Multer和NodeJS将图像上传到GCS存储桶?

我在将本地图像上传到我的Google云存储时遇到问题。

我已经尝试了两种方法。第一个是通过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始终为undefined,而req.body是这样的缓冲区:

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

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

我正在浏览Web寻求解决方案,但没有发现任何可以帮助我克服这种情况的方法。

任何建议?

回答如下:

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

在您的.env文件中

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

您可以从GCP控制台下载密钥文件>您的项目> I AM&Admin>服务帐户

在您的路线上

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();

}

[这会将文件存储到名称为[random-string-generated-by-gcs] _ [您的文件名称带有扩展名]的GCS上。可以通过req.file.filename在路由下进行相同的访问。

Documentation

发布评论

评论列表(0)

  1. 暂无评论