问题描述
我有一个小滴在使用数字海洋空间的数字海洋上运行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”是您的存储桶空间名称的名称