Firebase storage Загрузить файл-Python - PullRequest
0 голосов
/ 19 октября 2018

Мне нужна помощь. Я использую Python 3.6 для загрузки файла в хранилище Firebase, но я не смог получить разумный результат.

import firebase_admin
from firebase_admin import credentials, firestore, storage

cred=credentials.Certificate('C:\\Users\\blackturtle\\Envs\\tube\\ps.json')
firebase_admin.initialize_app(cred, {
    'storageBucket': 'gs://dene-2ac17.appspot.com'
})
db = firestore.client()
bucket = storage.bucket()
blob = bucket.blob('hello.txt')
outfile='C:\\Users\\blackturtle\\Envs\\tube\\hello.txt'
blob.upload_from_filename(outfile)

Этот код выдает эту ошибку ниже

Exception has occurred: google.api_core.exceptions.NotFound
404 POST https://www.googleapis.com/upload/storage/v1/b/gs://dene-2ac17.appspot.com/o?uploadType=multipart: ('Request failed with status code', 404, 'Expected one of', <HTTPStatus.OK: 200>)
  File "C:\Users\blackturtle\Envs\tube\drive.py", line 27, in <module>
    blob.upload_from_filename(outfile)

Когда я изменяю и использую этот код ниже для загрузки файла

import firebase_admin
from firebase_admin import credentials, firestore, storage

cred=credentials.Certificate('C:\\Users\\blackturtle\\Envs\\tube\\ps.json')
firebase_admin.initialize_app(cred, {
    'storageBucket': 'gs://dene-2ac17.appspot.com'
})
db = firestore.client()
bucket = storage.bucket()
blob = bucket.blob('hello.txt')
outfile='C:\\Users\\blackturtle\\Envs\\tube\\hello.txt'
with open(outfile, 'rb') as my_file:
    blob.upload_from_file(my_file)

Получил эту ошибку

Exception has occurred: google.api_core.exceptions.NotFound
404 POST https://www.googleapis.com/upload/storage/v1/b/gs://dene-2ac17.appspot.com/o?uploadType=resumable: ('Response headers must contain header', 'location')
  File "C:\Users\blackturtle\Envs\tube\drive.py", line 29, in <module>
    blob.upload_from_file(my_file)

Есть идеи, что происходит?

Заранее спасибо

1 Ответ

0 голосов
/ 19 октября 2018

Попробуйте изменить 'gs://dene-2ac17.appspot.com' на 'dene-2ac17.appspot.com', как объяснено здесь .

Использовать контейнер по умолчанию

Вы можете указатьимя сегмента по умолчанию при инициализации Admin SDK.Затем вы можете получить аутентифицированную ссылку на этот сегмент.Имя корзины не должно содержать gs: // или любых других префиксов протокола.Например, если URL-адрес корзины, отображаемый в консоли Firebase, имеет вид gs: //bucket-name.appspot.com, передайте строку bucket-name.appspot.com в Admin SDK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...