【问题标题】:How to download a folder from firebase with python?如何使用 python 从 firebase 下载文件夹?
【发布时间】:2022-06-13 01:55:13
【问题描述】:

我想下载 firebase 存储文件夹中的所有图像。我尝试按照这篇文章How to download an entire folder in firebase storge using python? 的说明进行操作。但没有成功。我收到如下错误,有人可以帮助我,感谢您阅读这篇文章。这是我得到的错误AttributeError: 'Storage' object has no attribute 'bucket'。 这是我的 Firebase 存储中的文件夹:

import pyrebase

config = {

  "apiKey": "",
  "authDomain": "",
  "projectId": "",
    "databaseURL": "",
  "storageBucket": "",
  "messagingSenderId": "",
  "appId": "",

}
firebase=pyrebase.initialize_app(config)
storage = firebase.storage()

path = "data"

ab=str(1)    
all_files = storage.child("images").list_files()
for file in all_files:             
    try:
        print(file.name)
        z=storage.child(file.name).get_url(None)
        storage.child(file.name).download(""+path+"/"+ab+".png")
        x=int(ab)
        ab=str(x+1)


    except:
        print('Download Failed')

【问题讨论】:

    标签: python python-3.x firebase google-cloud-firestore


    【解决方案1】:
    • list_files() 也需要服务帐户,请将其添加到您的配置中。

    如果你想下载图片,试试这个:

    import pyrebase
    
    config = {
      "apiKey": "",
      "authDomain": "",
      "projectId": "",
      "databaseURL": "",
      "storageBucket": "",
      "messagingSenderId": "",
      "appId": "",
      "serviceAccount": "path/to/serviceAccountCredentials.json"
    }
    firebase=pyrebase.initialize_app(config)
    storage = firebase.storage()
    
    path = "data"
    
    ab=str(1)    
    all_files = storage.child("images").list_files()
    
    for file in all_files:
        storage.child("images").child(file.name).download(path)
    

    【讨论】:

    • 我试过你上面的代码,但结果是一样的。你能指导我如何添加它吗?
    • 是的,当然,看看这个:prnt.sc/xB65Gn6ZP5pM - 你也可以去项目设置,然后服务账户,然后生成新的私钥在程序中使用它..
    【解决方案2】:

    我今天遇到了同样的问题。

    我真的花了整整一个晚上。 :(

    我用谷歌搜索所有可能有帮助但无济于事的关键字

    我找到了下载它们的方法!

    我不擅长这个,所以可能有问题。 但它对我有用。希望它也对你有用!

    我尝试用我自己的名字下载它们,如下所示:

    all_files = storage.child("images").list_files() # get all file
    cnt = 0
    for file in all_files:
      print(file.name)
      file.download_to_filename(str(cnt)+".jpg")
      cnt = cnt + 1
    

    它有效。 我有很多文件夹,list_file() 会全部获取。 并且 file.name 是“您的文件夹名称/您的图像名称.jpg”。 我认为问题是如果您在下载时使用 file.name 作为图像名称,它可能无法正常工作。

    如果你想保留源名称,可以在下载时使用 split() 来获取和使用它。

    如果您想选择保存它们的位置,只需在 download_to_filename() 中添加路径,如下所示:

    path = 'C:/foldername'
    file.download_to_filename(path+str(cnt)+".jpg")
    

    【讨论】:

      猜你喜欢
      • 2021-12-28
      • 2017-05-18
      • 2021-01-26
      • 2019-02-13
      • 2022-01-03
      • 2019-11-12
      • 2020-06-23
      • 2022-01-06
      • 2022-01-26
      相关资源
      最近更新 更多