【问题标题】:Django-storages upload FileField and ImageField to DropboxDjango-storages 将 FileField 和 ImageField 上传到 Dropbox
【发布时间】:2018-10-11 17:37:11
【问题描述】:

(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=DjangoAppNameHereFileFieldImageField 上都试过这个,但没有成功。 Dropbox 的文档在 django-storages 包中相当稀疏,并且没有描述如何设置字段以使其正常工作。

【问题讨论】:

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


    【解决方案1】:

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

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

    根据输出,您提供的路径看起来像本地 Windows 文件系统路径:'C:/TrainerPics/UI_4.png'

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

    【讨论】:

    • 感谢@Greg 的回复,您知道我将如何做到这一点吗?我猜在我的settings.py 文件中的某个地方,但我不确定如何仅为FileFieldImageField 实现这个。
    • 抱歉,我只能在 Dropbox 方面提供帮助。我没有使用django-storages 的经验。
    【解决方案2】:

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

    我使用了两个选项。

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

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

    【讨论】:

      猜你喜欢
      • 2020-12-08
      • 2012-05-08
      • 1970-01-01
      • 2012-03-28
      • 2013-04-19
      • 2014-06-30
      • 2019-09-09
      • 1970-01-01
      • 2011-02-10
      相关资源
      最近更新 更多