1

google-cloudやmulter-gcsのようなnpmパッケージを使用してfirebase storage bucketにファイルをアップロードすると(フードの下にGoogleのクラウドストレージを使用)、ファイルがアップロードされます。ただし、ファイルは表示されず、イメージの種類(MIME)も表示されます。また、node.jsアプリケーションで画像を使用するにはどうすればよいですか?Firebase storage:アップロード後にイメージファイルの種類が表示されません。画像を使用するにはどうすればいいですか?

画像はfirebase bucketにアップロードするコードです。ファイルのアップロードを処理するために使用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

答えて

1

multer-gcsは、カスタムメタデータをファイルに追加する機能をサポートしていません。 gcloudがすでにサポートしている、特に以来、私はmulterの開発者と問題を提出し、サイドブロブのアップロードに沿ってメタデータのアップロードをサポートするように依頼したい

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

:あなたが直接gcloudを使用する場合は、このような何かをしたいですこれを行う能力。

+0

ありがとうございました。私はオプションで 'メタデータ'を使用していませんでした。しかし、これらのオプションを明示的に設定すると、firebaseのファイルタイプのメタデータを更新できるようになりました。私は 'publicread''として' predefinedAcl'オプションを設定して、公開URLを誰にでも見せて、どんなブラウザでも表示できるようにする必要がありました。 実際、私は_multer_でファイルをアップロードし、それをblobとして受け取っているので、bucket.uploadメソッドではなく、 'createWriteStream'でオプションを使う必要がありました。その素晴らしいヒントに感謝します。 –

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); 
関連する問題