Django媒体网址与digitalocean空间不匹配

问题描述

我有一个小滴在使用数字海洋空间的数字海洋上运行django应用程序。我设法使用cdn设置了与静态文件一起很好运行的空间。但是,我的问题出在上传的媒体文件上。我面临着django提供的上传文件的网址不匹配以及空间中上传文件的实际路径不匹配的问题。 例如,如果我使用模型上传文件:

attachment = models.FileField(upload_to='Mailserver/',blank=True,null=True)

以及当我单击它时返回的文件的路径,返回错误,路径为 “ https://freelance.ams3.cdn.digitaloceanspaces.com/media/Mailserver/download.png”是错误的,因为上传到空格的文件的正确路径是:“ https://freelance.ams3.cdn.digitaloceanspaces .com / freelance / media / Mailserver / download.png'

这是我的设置配置:

AWS_ACCESS_KEY_ID = '****************************'
AWS_SECRET_ACCESS_KEY = '*****************************'
AWS_STORAGE_BUCKET_NAME = 'freelance'
AWS_S3_ENDPOINT_URL = 'https://freelance.ams3.digitaloceanspaces.com/'
AWS_S3_CUSTOM_DOMAIN = 'freelance.ams3.cdn.digitaloceanspaces.com'
AWS_S3_SIGNATURE_VERSION = 's3v4'
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',}
AWS_DEFAULT_ACL = 'public-read'
STATIC_URL = '{}/{}/'.format(AWS_S3_CUSTOM_DOMAIN,'static')
STATIC_ROOT = 'static/'
STATICFILES_STORAGE = 'custom_storages.StaticStorage'

MEDIA_ROOT = 'media/'
MEDIA_URL = '{}/{}/'.format(AWS_S3_CUSTOM_DOMAIN,MEDIA_ROOT)
DEFAULT_FILE_STORAGE = 'custom_storages.MediaStorage'

custom_storages如下:

from storages.backends.s3boto3 import S3Boto3Storage
from django.conf import settings

class StaticStorage(S3Boto3Storage):
    bucket_name = settings.AWS_STORAGE_BUCKET_NAME
    location = settings.STATIC_ROOT

class MediaStorage(S3Boto3Storage):
    bucket_name = settings.AWS_STORAGE_BUCKET_NAME
    location = settings.MEDIA_ROOT

我尝试创建文件夹并更改目录无济于事。我不知道如何解决这个问题。任何帮助将不胜感激。

解决方法

对于遇到类似问题的任何人,我想出了一个解决方案,只需将您的自定义域编辑为:

AWS_S3_CUSTOM_DOMAIN = 'freelance.ams3.cdn.digitaloceanspaces.com/freelance'

其中“ freelance”是您的存储桶空间名称的名称

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...