Django存储将FileField和ImageField上传到Dropbox

时间:2018-10-11 17:37:12

标签: python django django-rest-framework dropbox django-storage

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

我正在尝试将文件上传到我创建的Dropbox应用文件夹中,但是每次尝试都遇到相同的错误:

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字符的情况,并使用FileFieldImageField// product { categories: [{ name: 'category 1', subCategoryId: 'cat1' }, { name: 'category 2', }] } 都进行了此操作,但均未成功。在django-storages软件包中,Dropbox的文档很少,并且没有描述如何设置字段以使其正常工作。

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

该错误消息来自Dropbox API,表明所提供的路径与预期格式不匹配。也就是说,通过Dropbox API上传到Dropbox时,您应该以与提供的格式匹配的格式为上传的文件提供所需的路径。

最常用的格式是该模式的第一部分,它只是相对于Dropbox中根目录的远程路径的“ /”分隔路径。例如:'/TrainerPics/UI_4.png'

根据输出,您提供的路径类似于本地Windows文件系统路径:'C:/TrainerPics/UI_4.png'

您需要更新应用程序/配置以提供远程路径。

答案 1 :(得分:0)

这是一个古老的问题,只是为了帮助可能遇到类似问题的人。

我使用了两个选项。

  1. 上传文件时使用linux计算机。这将允许API上传图像,因为它可能与服务器的文件系统相同。

  2. 仅在服务器上使用DROPBOX API,并在本地开发中使用本地文件存储。服务器在unix上运行,不会产生错误。