Firebase-adminとfirebase-functionsを使用して、FirebaseStorageにファイルをアップロードします。
私はストレージにこのルールを持っています:
service firebase.storage {
match /b/{bucket}/o {
match /images {
allow read;
allow write: if false;
}
}
}
そして、私はこのコードで公開URLを取得したいと思います:
const config = functions.config().firebase;
const firebase = admin.initializeApp(config);
const bucketRef = firebase.storage();
server.post('/upload', async (req, res) => {
// UPLOAD FILE
await stream.on('finish', async () => {
const fileUrl = bucketRef
.child(`images/${fileName}`)
.getDownloadUrl()
.getResult();
return res.status(200).send(fileUrl);
});
});
しかし、私はこのエラーがあります.child is not a function
。 firebase-adminでファイルのパブリックURLを取得するにはどうすればよいですか?
Cloud Storageドキュメントを使用 のサンプルアプリケーションコードから、アップロードが成功した後にパブリックダウンロードURLを取得するために次のコードを実装できるはずです。
_// Create a new blob in the bucket and upload the file data.
const blob = bucket.file(req.file.originalname);
const blobStream = blob.createWriteStream();
blobStream.on('finish', () => {
// The public URL can be used to directly access the file via HTTP.
const publicUrl = format(`https://storage.googleapis.com/${bucket.name}/${blob.name}`);
res.status(200).send(publicUrl);
});
_
または、一般公開されているダウンロードURLが必要な場合は、 この回答 を参照してください。これは、管理SDKが使用しないため、Cloud Storage NPMモジュールから getSignedUrl()
を使用することをお勧めします。 tこれを直接サポートします:
@ google-cloud/storage NPMモジュールを介して getSignedURL を使用して署名付きURLを生成する必要があります。
例:
_const gcs = require('@google-cloud/storage')({keyFilename: 'service-account.json'}); // ... const bucket = gcs.bucket(bucket); const file = bucket.file(fileName); return file.getSignedUrl({ action: 'read', expires: '03-09-2491' }).then(signedUrls => { // signedUrls[0] contains the file's public URL });
_