Django-хранилища загружают FileField и ImageField в Dropbox - PullRequest
0 голосов
/ 11 октября 2018

(Django 2.0, Django Rest Framework 3.8, Python 3.6, Django Storages 1.7, Dropbox 9.1)

Я пытаюсь загрузить файл в созданную папку Dropbox App, но сталкиваюсь содна и та же ошибка при каждой попытке:

C:/TrainerPics/UI_4.png' did not match pattern '(/(.|[\r\n])*|id:.*)|(rev:[0-9a-f]{9,})|(ns:[0-9]+(/.*)?)'

На панели управления Dropbox с рабочего стола папка, в которую я хочу загрузить, отображается как:

Dropbox > Apps > DjangoAppNameHere

Вот мои настройки в settings.py:

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATIC_URL = '/static/'

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

STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

DEFAULT_FILE_STORAGE = 'storages.backends.dropbox.DropBoxStorage'
DROPBOX_OAUTH2_TOKEN = 'some_token_here'

, где storages также указан в установленных приложениях.Вот поле модели, которое я пытаюсь загрузить:

trainer_profile_pic = models.ImageField(upload_to="TrainerPics/", null=True, blank=True)

Я пробовал это как с символом /, так и без него, и пробовал это, используя upload_to=DjangoAppNameHere с FileField и ImageField без успеха.Документация для Dropbox довольно скудна в пакете django-storages и не описывает, как настроить поле для его работы.

Ответы [ 2 ]

0 голосов
/ 24 июня 2019

Это старый вопрос, просто чтобы помочь людям, у которых могут быть подобные проблемы.

Я использовал две опции.

  1. Используйте Linux-машину при загрузке ваших файлов.Это позволит API загружать ваше изображение, так как это, вероятно, та же файловая система, что и его серверы.

  2. Используйте только API DROPBOX на сервере и локальное хранилище файлов при локальной разработке.Серверы работают на Unix, и это не выдает ошибку.

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

Это сообщение об ошибке исходит от Dropbox API и указывает, что указанный путь не соответствует ожидаемому формату.То есть при загрузке в Dropbox через API Dropbox вы должны указать желаемый путь для загруженного файла в формате, который соответствует предоставленному шаблону.

Наиболее часто используемым форматом для этого является первая часть этого шаблона, представляющая собой просто разделенный "/" путь для удаленного пути относительно корня в Dropbox.Например: '/TrainerPics/UI_4.png'.

На основе выходных данных вместо этого вы указываете путь, который выглядит как путь локальной файловой системы Windows: 'C:/TrainerPics/UI_4.png'.

Вам необходимо обновитьприложение / конфигурация для предоставления удаленного пути вместо.

...