【发布时间】:2020-09-02 13:43:05
【问题描述】:
我有一个使用数字海洋空间在数字海洋上运行 django 应用程序的液滴。我已经设法使用 cdn 设置了与静态文件一起运行良好的空间。但是,我的问题在于上传的媒体文件。我面临 django 提供的上传文件的 url 不匹配的问题,以及空间中上传文件的实际路径。 例如,如果我使用模型上传文件:
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
我尝试创建文件夹和更改目录均无济于事。我不知道如何解决这个问题。任何帮助将不胜感激。
【问题讨论】:
标签: django amazon-s3 digital-ocean