Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django在上传到Amazon S3 bucket之前更改图像名称_Python_Django - Fatal编程技术网

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存储桶的存储方法