Firebase存储:上传后不显示图片文件types。 我如何使用图像?

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

以下是将图片上传到Firebase存储区的代码。 用multer来处理file upload

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

当我直接上传文件到存储桶时,input显示清晰。 这里有什么? 在这里输入图像说明

它看起来像multer-gcs不支持将自定义元数据添加到文件的function。 如果你直接使用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已经支持这个function。

这是我现在正在处理file upload。

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