Cloud Storage for Firebaseを使用していますが、ストレージファイルにアクセスする方法がわかりません
https://firebase.google.com/docs/storage/web/start 公式ガイドおよび https://firebase.google.com/docs/storage/web/create)によると-reference このコードはルート参照を返す必要があります
let admin = require('firebase-admin')
admin.initializeApp({...})
let storageRef = admin.storage().ref()
しかし、それは言うエラーをスローします
TypeError:admin.storage(...)。refは関数ではありません
package.json
{
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {...},
"dependencies": {
"@google-cloud/storage": "^1.5.1",
"firebase": "^4.8.0",
"firebase-admin": "~5.4.2",
"firebase-functions": "^0.7.1",
"pdfkit": "^0.8.3",
"uuid": "^3.1.0"
},
"private": true
}
ノード-v =>v7.7.4
私の最終目標は、ファイルをダウンロードするか、PDFファイルをストレージにアップロードすることです。
CloudFunctionsとFirebaseAdmin SDKを使用して、バケットにアクセスしようとしています。あなたが引用したスタートガイドは、管理者ではなく、Firebase用のWebApiを使用したクライアントサイドのWebアプリについて説明しています。 SDKが異なるため(名前が同じであっても)、機能は異なります。アクセスしようとしているStorage
オブジェクトにはref()
関数がなく、app
とbucket()
のみがあります。 https://firebase.google.com/docs/reference/admin/node/admin.storage.Storage
Google Cloud APIを直接使用してみてください: https://cloud.google.com/storage/docs/creating-buckets#storage-create-bucket-nodejs
以下の例では、「images」と呼ばれる既存のFirestoreコレクションから画像参照を抽出しています。特定の投稿に関連する画像のみを取得するように、「images」コレクションと「posts」コレクションを相互参照しています。これは必須ではありません。
const storageBucket = admin.storage().bucket( 'gs://{YOUR_BUCKET_NAME_HERE}.appspot.com' )
const getRemoteImages = async() => {
const imagePromises = posts.map( (item, index) => admin
.firestore()
.collection('images')
.where('postId', '==', item.id)
.get()
.then(querySnapshot => {
// querySnapshot is an array but I only want the first instance in this case
const docRef = querySnapshot.docs[0]
// the property "url" was what I called the property that holds the name of the file in the "posts" database
const fileName = docRef.data().url
return storageBucket.file( fileName ).getSignedUrl({
action: "read",
expires: '03-17-2025' // this is an arbitrary date
})
})
// chained promise because "getSignedUrl()" returns a promise
.then((data) => data[0])
.catch(err => console.log('Error getting document', err))
)
// returns an array of remote image paths
const imagePaths = await Promise.all(imagePromises)
return imagePaths
}
統合された重要な部分は次のとおりです。
const storageBucket = admin.storage().bucket( 'gs://{YOUR_BUCKET_NAME_HERE}.appspot.com' )
const fileName = "file-name-in-storage" // ie: "your-image.jpg" or "images/your-image.jpg" or "your-pdf.pdf" etc.
const remoteImagePath = storageBucket.file( fileName ).getSignedUrl({
action: "read",
expires: '03-17-2025' // this is an arbitrary date
})
.then( data => data[0] )