Firebase存储:上传后未显示的图像文件类型。如何使用图片?

时间:2016-08-23 18:58:28

标签: node.js express firebase google-cloud-storage firebase-storage

当我使用像google-cloud或multer-gcs这样的npm软件包将文件上传到firebase存储桶(使用底层的谷歌云存储......)时,文件会上传。但是,该文件不显示和图像类型(MIME)。另外,如何在 node.js 应用程序中使用该图像?

以下是将图片上传到firebase存储桶的代码。使用multer处理文件上传..

var path = require('path');
var multer = require('multer');
var gcs = require( 'multer-gcs' );

var storage = gcs({
    filename    : function( req, file, cb ) {
        cb( null, file.fieldname + '-' + Date.now() + path.extname(file.originalname).toLowerCase());
    },
    bucket      : 'p****n-bcXX3.appspot.com', // Required : bucket name to upload 
    projectId   : 'p****n-bcXX3', // Required : Google project ID 
    keyFilename: './p****n-5cbc725XXXXd.json', // Required : JSON credentials file for Google Cloud Storage 
    acl : 'publicread' // Optional : Defaults to private 
});

在我的路线中:

router.post('/food/create', [authChecker, gcsUpload.single('food_image')], function(req, res, next) {
    Controllers.create_food(req, res);
});

当我直接将文件上传到存储桶时,键入清楚显示。这里的特色是什么? enter image description here

2 个答案:

答案 0 :(得分:1)

multer-gcs似乎不支持向文件添加自定义元数据的功能。如果您直接使用gcloud,则可以执行以下操作:

var options = {
  destination: 'new-image.png',
  metadata: {
    contentType: 'image/png'
  }
};

bucket.upload('local-image.png', options, function(err, file) {
  // Your bucket now contains:
  // - "new-image.png" (with the contents of `local-image.png')

  // `file` is an instance of a File object that refers to your new file.
});

我向multer的开发人员提出问题,并要求他们支持沿着blob上传的元数据上传,特别是因为gcloud已经支持执行此操作的能力。

答案 1 :(得分:0)

以下是我正在做的处理文件上传的内容。

req.file.modifiedname = (Math.random().toString(36)+'00000000000000000').slice(2, 10) + Date.now() + path.extname(req.file.originalname);
var options = {
  metadata: {
    contentType: req.file.mimetype
  },
  predefinedAcl : 'publicread'
};

var blob = bucket.file(req.file.modifiedname);
var blobStream = blob.createWriteStream(options);

blobStream.on('error', function (err) {
  return next(err);
});

blobStream.on('finish', function() {
  publicUrl = format(
    'https://storage.googleapis.com/%s/%s',
    bucket.name, blob.name
  );
  req.file.gcsfileurl = publicUrl;
  console.log(req.file.gcsfileurl);
  next();
});

blobStream.end(req.file.buffer);