Django 媒体 url 与 digitalocean 空间不匹配
Django media url mismatch with digitalocean spaces
我有一个 droplet 运行 一个使用数字海洋的数字海洋上的 django 应用程序 spaces.I 已经成功地设置了使用 cdn 与静态文件一起运行的空间。但是,我的问题在于上传的媒体 files.I 我面临着 django 提供的上传文件的 url 不匹配的问题,以及上传文件在空间中的实际路径。
例如,如果我使用模型上传文件:
attachment = models.FileField(upload_to='Mailserver/',blank=True,null=True)
点击返回的文件路径,returns错误路径为
'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' 是您的存储桶空间名称
我有一个 droplet 运行 一个使用数字海洋的数字海洋上的 django 应用程序 spaces.I 已经成功地设置了使用 cdn 与静态文件一起运行的空间。但是,我的问题在于上传的媒体 files.I 我面临着 django 提供的上传文件的 url 不匹配的问题,以及上传文件在空间中的实际路径。 例如,如果我使用模型上传文件:
attachment = models.FileField(upload_to='Mailserver/',blank=True,null=True)
点击返回的文件路径,returns错误路径为 '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' 是您的存储桶空间名称