【问题标题】:How to delete a image file from Google firebase Storage using python如何使用 python 从 Google Firebase 存储中删除图像文件
【发布时间】:2021-06-14 07:31:48
【问题描述】:

我目前正在创建一个 Web 应用程序 (Flask),用户可以在其中登录并将照片上传到 Google Firebase。在代码中的某一时刻,我最初将用户上传的照片保存到本地文件夹,但部署后无法正常工作,因此我决定将其临时存储在 Google 存储中,分析其中的面孔,然后将其删除。但是,由于某种原因,我无法将其从 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 的使用水平很低,我认为删除也是一样的。谢谢!

【问题讨论】:

    标签: python firebase flask google-cloud-storage pyrebase


    【解决方案1】:

    我是 OP,我发现了我的问题!这篇GitHub 帖子帮助我了解到,当出现“存储”没有“存储桶”错误时,您需要“将服务帐户添加到配置中”。

    为此,我遵循了Firebase Admin Documentation,这非常简单。

    但是,我需要进行 2 个主要修复。我使用这个Stackoverflow 帖子作为指导解决了这个问题。

    首先是为我的应用添加我上面缺少的 storageBucket。

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

    第二个问题是当我尝试在同一个 [Stackoverflow] 帖子中看到的 bucket = storage.bucket() 时,我收到了存储没有属性存储桶的错误。这个我找不到任何东西,这就是我发帖的原因。

    在我导入的 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 的模块,它变得很困惑。

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

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

    【讨论】:

      猜你喜欢
      • 2017-08-13
      • 2019-12-15
      • 2019-06-03
      • 2017-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-14
      相关资源
      最近更新 更多