Python Django在上传到Amazon S3 bucket之前更改图像名称
我使用的是Python Django在上传到Amazon S3 bucket之前更改图像名称,python,django,Python,Django,我使用的是Django-1.7,在模型中有一个类型为ImageField的字段来存储到AWS S3 bucket的图像链接 cover_image = models.ImageField(upload_to='s3_bucket_name/', null=True, blank=True) 在settins.py文件中,我有 MEDIA_ROOT = 'url_to_aws_s3_bucket' MEDIA_URL = 'url_to_aws_s3_bucket' DEFAULT_FILE_S
Django-1.7
,在模型中有一个类型为ImageField
的字段来存储到AWS S3 bucket的图像链接
cover_image = models.ImageField(upload_to='s3_bucket_name/', null=True, blank=True)
在settins.py
文件中,我有
MEDIA_ROOT = 'url_to_aws_s3_bucket'
MEDIA_URL = 'url_to_aws_s3_bucket'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_STORAGE_BUCKET_NAME = 'bucket_name'
AWS_ACCESS_KEY_ID = 's3_access_key'
AWS_SECRET_ACCESS_KEY = 's3_secret_key'
问题是,当我上载名称中带有@
字符的图像时,Django会在将图像上载到Amazon S3 bucket之前删除@
的所有实例。
如何保持图像文件名的完整性?您可以尝试从S3BOtograge继承并重新定义get\u available\u name方法:
class MyS3BotoStorage(S3BotoStorage):
def get_available_name(self, name):
return name
我没有将字符串作为
upload\u传递给='s3\u bucket\u name/'
,而是传递了函数
def change_filename(instance, filename):
return 'bucket_name/' + filename
# inside the model class
cover_image = models.ImageField(upload_to=change_filename, null=True, blank=True)
现在它很好用。我试过了。它仍会执行相同的操作-在上载图像文件之前删除所有
@
s。是否有S3存储桶的存储方法