Firebase Storage - ошибка при загрузке png изображения через Python google-cloud-storage lib - PullRequest
2 голосов
/ 05 февраля 2020

Я запускаю веб-приложение на основе базы данных Firebase Realtime и хранилища Firebase.

Мне нужно каждый час загружать новые изображения в Google Firebase через Python google-cloud-storage lib. Вот документы .

Мой код для загрузки изображения (img_sr c путь указан правильно):

    bucket = storage.bucket()
    blob = bucket.blob(img_src)
    blob.upload_from_filename(filename=img_path, content_type='image/png')

Кажется, что изображение успешно загружено , но при ручном просмотре в Firebase Storage он не загружается. Кажется, что все характеристики изображения верны. Пожалуйста, сравните характеристики загруженного вручную изображения (загружается нормально) с поврежденным.

enter image description here

enter image description here

Спасибо за помощь!

1 Ответ

1 голос
/ 11 февраля 2020

Каждый раз, когда вы загружаете изображение с помощью Firebase Console, автоматически генерируется токен доступа . Однако, если вы загружаете изображение с помощью любого Admin SDK или gsutil, вам нужно будет вручную сгенерировать этот токен доступа .

Вот пример того, как создать и установить токен доступа для изображения с использованием Admin Python SDK.

import firebase_admin
from firebase_admin import credentials
from firebase_admin import storage

# Import UUID4 to create token
from uuid import uuid4

cred = credentials.Certificate("path/to/your/service_account.json")
default_app = firebase_admin.initialize_app(cred, {
    'storageBucket': '<BUCKET_NAME>.appspot.com'
})

bucket = storage.bucket()
blob = bucket.blob(img_src)

# Create new token
new_token = uuid4()

# Create new dictionary with the metadata
metadata  = {"firebaseStorageDownloadTokens": new_token}

# Set metadata to blob
blob.metadata = metadata

# Upload file
blob.upload_from_filename(filename=img_path, content_type='image/png')

Вот краткое объяснение:

  • Импортируйте библиотеку UUID4 для создания токена. from uuid import uuid4
  • Создать новый UUID4. new_token = uuid4()
  • Создать новый словарь с парой ключ-значение. metadata = {"firebaseStorageDownloadTokens": new_token}
  • Установите его в качестве метаданных BLOB-объекта. blob.metadata = metadata
  • Загрузить файл. blob.upload_from_filename(...)

Это решение может быть реализовано для любого Admin SDK.

Поддержка Firebase говорит, что это исправлено, но я думаю, что любой, у кого возникла эта проблема, должен go таким образом вместо ожидания Firebase , чтобы это исправить.

...