如何使用python从Google firebase存储中删除图像文件

2024-06-16 09:19:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在创建一个Web应用程序(Flask),用户可以登录并将照片上传到Google Firebase。在代码的某一点上,我最初将用户上传的照片保存到本地文件夹,但在部署时,这无法正常工作,因此我决定将其临时存储在Google存储中,分析其中的人脸,然后将其删除。但是,由于某种原因,我无法将其从谷歌存储中删除

Firebase初始化:

import pyrebase
from pyrebase.pyrebase import storage 
import firebase_admin
from firebase_admin import storage, credentials

firebase = pyrebase.initialize_app(json.load(open('firebase/firebaseConfig.json')))
auth = firebase.auth()
db = firebase.database()                                    
storage = firebase.storage()

我以前不需要删除存储中的照片,但我可以存储图像并检索它们的URL以供下载,如下所示。我确信该图像存储在我的Google存储中,当我尝试storage.delete()时,尝试失败

try:
   storage.child("images/temp/" + filename).put(image, userIdToken)
   current_app.logger.info("[UPLOAD-IMAGE] Photo saved, grabbing url")
   imageURL = storage.child("images/temp/" + filename).get_url(None)

   anazlyzeInfo = recognize.facialRecognition(imageURL)

   delete_temp_image_path = "images/temp/" + filename
   #storage.delete(imageURL) # same error happens when URL is passed
   storage.delete(delete_temp_image_path)

异常中描述的错误是:'Storage' object has no attribute 'bucket'

我对此进行了一段时间的研究,并尝试了其他解决方案,如StorageRef 并遇到错误'Storage' has no attribute 'ref'

我还尝试了A Service Account遵循Google Admin SDK设置,但不确定现在该怎么办:

cred = credentials.Certificate(json.load(open('firebase/fiddl-dev-firebase-adminsdk-stuffdnsnfsnfk.json')))
admin = firebase_admin.initialize_app(cred)

我尝试了一段时间来处理这个问题,但是我不知道用admin调用什么

我尝试的两个修复中的任何一个都正确吗?我以前对Firebase的使用非常低,我认为删除也一样。谢谢


Tags: imageimportjsonappadmingooglestoragefilename
1条回答
网友
1楼 · 发布于 2024-06-16 09:19:15

我是警察,我解决了我的问题!这篇GitHub文章帮助我了解到,当获取“存储”没有“bucket”错误时,需要“向配置中添加服务帐户”

为了做到这一点,我遵循了非常直接的Firebase Admin Documentation

然而,我需要两个主要的修复。我用这篇{a3}文章作为指导修复了这个问题

第一个是为我的应用程序添加我的storageBucket,上面我没有看到

admin = firebase_admin.initialize_app(cred, {
      'storageBucket': 'fiddl-dev.appspot.com'})

第二个问题是,当我尝试在同一篇[Stackoverflow]文章中看到的bucket = storage.bucket()时,我得到了一个错误,即存储没有一个属性bucket。我在上面找不到任何东西,这就是我为什么发这篇文章的原因

在my file.py的顶部,我导入:

import pyrebase
from pyrebase.pyrebase import storage  
import firebase_admin
from firebase_admin import storage as admin_storage, credentials, firestore

关键是我添加了import storage as admin_storage,而不是我所拥有的import storage。本质上,我两次导入名为storage的模块,结果弄糊涂了

通过最后的更改,我现在能够测试以下代码,该代码从指定的GoogleFirebase存储中的文件路径中删除了该图像

bucket = admin_storage.bucket()
blob = bucket.blob('images/temp/pumpkin.jpg')
print(blob)
blob.delete()

相关问题 更多 >