如何使用 python 从 Google firebase 存储中删除图像文件
How to delete a image file from Google firebase Storage using python
我目前正在创建一个 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 following the Google Admin SDK 设置,但我不确定现在该怎么做:
cred = credentials.Certificate(json.load(open('firebase/fiddl-dev-firebase-adminsdk-stuffdnsnfsnfk.json')))
admin = firebase_admin.initialize_app(cred)
我尝试使用它一段时间,但我无法弄清楚 admin
可以调用什么。
我尝试的两个修复方法是否正确?我以前对 Firebase 的使用水平很低,我认为删除也是一样的。谢谢!
我是 OP,我解决了我的问题! GitHub post 帮助我了解到当出现 'storage' 没有 'bucket' 错误时,您需要“向配置添加服务帐户”。
为此,我遵循了非常简单的 Firebase Admin Documentation。
但是我需要 2 个主要修复程序。我使用此 post 作为指南修复了此问题。
首先是为我的应用程序添加我在上面遗漏的 storageBucket。
admin = firebase_admin.initialize_app(cred, {
'storageBucket': 'fiddl-dev.appspot.com'})
第二个问题是当我尝试在同一个 [Whosebug] post 中看到的 bucket = storage.bucket()
时,我得到了存储没有属性桶的错误。我在上面找不到任何东西,这就是我制作 post.
的原因
在我的 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()
我目前正在创建一个 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 following the Google Admin SDK 设置,但我不确定现在该怎么做:
cred = credentials.Certificate(json.load(open('firebase/fiddl-dev-firebase-adminsdk-stuffdnsnfsnfk.json')))
admin = firebase_admin.initialize_app(cred)
我尝试使用它一段时间,但我无法弄清楚 admin
可以调用什么。
我尝试的两个修复方法是否正确?我以前对 Firebase 的使用水平很低,我认为删除也是一样的。谢谢!
我是 OP,我解决了我的问题! GitHub post 帮助我了解到当出现 'storage' 没有 'bucket' 错误时,您需要“向配置添加服务帐户”。
为此,我遵循了非常简单的 Firebase Admin Documentation。
但是我需要 2 个主要修复程序。我使用此
首先是为我的应用程序添加我在上面遗漏的 storageBucket。
admin = firebase_admin.initialize_app(cred, {
'storageBucket': 'fiddl-dev.appspot.com'})
第二个问题是当我尝试在同一个 [Whosebug] post 中看到的 bucket = storage.bucket()
时,我得到了存储没有属性桶的错误。我在上面找不到任何东西,这就是我制作 post.
在我的 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()