当我使用firebase-admin
包将图像上传到我的 Firebase 项目时,我总是很困难。
这是我以管理员用户身份上传图像时得到的结果,使用我的应用程序的管理部分,该部分使用常规firebase
JS 包。
这是我使用的代码:
const metadata = {
cacheControl: "public,max-age=31536000,must-revalidate"
// contentType: "image/jpeg" // THIS IS AUTO INFERRED BY FIREBASE
};
const storageRef = firebase.storage().ref(`${directory}/${fileName}`);
const uploadTask = storageRef.put(file,metadata);
uploadTask.on("state_changed",
function progress() {...},
function error() {...},
function complete() {...}
);
这就是我在 Firebase 存储控制台上得到的:带有链接和下载令牌的漂亮预览。即使cacheControl
元数据没有显示,它也被设置了,因为当我在浏览器上访问图像的 URL 时它是可见的。
现在我正在编写一个admin
脚本来将我在本地机器上的一些图像上传到我的 Firebase 存储。
这是代码:
async function uploadImage() {
admin.storage().bucket().upload(
`./temp/${imageLocation}`, // THIS IS MY LOCAL PATH
{
destination: imageLocation, // THIS IS THE PATH FOR THE STORAGE
}
);
console.log(`Uploaded: ${imageLocation}`);
}
一切正常,文件确实已上传,但这是我在 Firebase 存储控制台上得到的:
问题
我如何使用 ,firebase-admin
以获得与firebase
在浏览器上使用JS 包上传图像时相同的一致结果?
我可以firebase
在我的 NodeJs 管理脚本中使用常规包吗?我想我必须admin
在发出firebase.storage().ref().put()
请求之前以用户身份进行身份验证,因为所有存储路径都受allow write: if request.auth.token.admin == true;
.
你需要添加 uuidv4 包:
const { uuid } = require('uuidv4')
bucket.upload('cat.png', {
destination: 'cat.png',
metadata: {
metadata: {
firebaseStorageDownloadTokens: uuid(),
}
},
})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句