Модель Django FileField имеет значение «ноль» вместо URL-адреса файла при использовании Google Cloud Storage - PullRequest
0 голосов
/ 03 ноября 2019

Я запускаю приложение «Диспетчер файлов» на локальном компьютере с помощью прокси-сервера Google Cloud Sql и сохраняю файлы в корзине Google Cloud Storage. Файл сохраняется в корзине, но для FileField установлено значение «ноль». Я хочу, чтобы он отображал URL, по которому я могу получить доступ к файлу.

Я следую за этим ответом Настроить Django и Google Cloud Storage?

Я установил GoogleОбщедоступное облачное хранилище.

Django Модель:

class Document(models.Model):
    docfile = models.FileField(upload_to='documents/%Y/%m/%d')

Setting.py:

#MEDIA_URL = "/media/"
#MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

DEFAULT_FILE_STORAGE = 'storages.backends.gcloud.GoogleCloudStorage'
GS_BUCKET_NAME = 'printhub-files'

GS_PROJECT_ID = 'preasy-53c43'
GS_MEDIA_BUCKET_NAME = 'printhub-files'
# GS_STATIC_BUCKET_NAME = '<name-of-static-bucket>'
# STATIC_URL = 'https://storage.googleapis.com/{}/'.format(GS_STATIC_BUCKET_NAME)
MEDIA_URL = 'https://storage.googleapis.com/{}/'.format(GS_MEDIA_BUCKET_NAME)

Ожидаемый результат:

{
    "id": 13,
    "docfile": "https://storage.googleapis.com/bucket/documents/2019/11/03/myfile.pdf",
}

ActualРезультат:

{
    "id": 13,
    "docfile": null,
}

Если я изменю свой Settings.py на (раскомментируйте строку 1,2. Строка комментария 4), файл будет сохранен на моем носителе / ​​в папке на локальном компьютере, а для "docfile" будет установлено значениеURL ведра:

MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

#DEFAULT_FILE_STORAGE = 'storages.backends.gcloud.GoogleCloudStorage'
GS_BUCKET_NAME = 'printhub-files'

GS_PROJECT_ID = 'preasy-53c43'
GS_MEDIA_BUCKET_NAME = 'printhub-files'
# GS_STATIC_BUCKET_NAME = '<name-of-static-bucket>'
# STATIC_URL = 'https://storage.googleapis.com/{}/'.format(GS_STATIC_BUCKET_NAME)
MEDIA_URL = 'https://storage.googleapis.com/{}/'.format(GS_MEDIA_BUCKET_NAME)

Я получаю вывод:

{
    "id": 13,
    "docfile": "https://storage.googleapis.com/bucket/documents/2019/11/03/myfile.pdf",
}

1 Ответ

0 голосов
/ 07 ноября 2019

Кажется, вы неправильно настраиваете файл settings.py. Проверьте документацию , чтобы использовать Google Cloud Storage Bucket для проекта Djanjo.

Как видно из документации, файл settings.py должен выглядеть следующим образом:

settings.py

.....
GCS_ROOT = "https://storage.googleapis.com/{bucket_name}/".format(
  bucket_name=os.environ.get("GCS_BUCKET")
)

MEDIA_PREFIX = "media"
MEDIA_URL = "{gcs_root}{prefix}/".format(
  gcs_root=GCS_ROOT,
  prefix=MEDIA_PREFIX,
)
......

Дайте мне знать, если это работает для вас.

...