Как написать функцию HTTP Firebase, которая возвращает URL-адрес (в обычном тексте), где можно загрузить изображение?
Я использую последнюю версию Firebase Admin SDK. У меня есть файл под названием в ящике по умолчанию, для которого я хотел бы вернуть URL-адрес через HTTP-вызов, я придумал этот код:
exports.getImageUrl = functions.https.onRequest((request, response) => {
return firebase.storage().bucket().file("images/thumbnail.png").getSignedUrl({
action: 'read',
expires: '03-09-2491'
})
.then(signedUrls => {
return response.send(signedUrls[0])
})
.catch(error => {
return response.status(500).send(error)
})
})
, но это не удается:
callback is not a function
at /user_code/node_modules/firebase-admin/node_modules/@google-cloud/storage/src/file.js:1784:7
at Request._callback (/user_code/node_modules/firebase-admin/node_modules/google-auto-auth/index.js:362:9)
Что я делаю неправильно?
EDIT
Я добавил подробные записи:
exports.getImage = functions.https.onRequest((request, response) => {
console.log("start")
const storage = firebase.storage()
console.log(storage)
const bucket = storage.bucket()
console.log(bucket)
const file = bucket.file("buildInExercises/bb_4zigzagcushionblue_thumbnail.png")
console.log(file)
return file.getSignedUrl({
action: 'read',
expires: '03-09-2491'
})
.then(urls => {
return response.send(urls)
})
.catch(error => {
return response.status(500).send(error)
})
})
Теперь я получаю правильный ответ:
{
"message": "Permission iam.serviceAccounts.signBlob is required to perform this operation on service account projects/snookercoachapp-dev/serviceAccounts/snookercoachapp-dev@appspot.gserviceaccount.com."
}
У меня есть проблема с разрешением?
Сообщение об ошибке является симптомом лица, что
getSignedUrl()
работает только при инициализации SDK администратора с учетной записью службы. Это означает, что вы не можете зависеть от учетных данных по умолчанию, которые используются при вызовеadmin.initializeApp()
без аргументов.