【问题标题】:Django changes image name before uploading to Amazon S3 bucketDjango 在上传到 Amazon S3 存储桶之前更改图像名称
【发布时间】:2015-09-08 05:10:10
【问题描述】:

我正在使用 Django-1.7 并在模型中有一个 ImageField 类型的字段来存储到 AWS S3 存储桶的图像链接

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 存储桶之前删除所有 @ 实例。

如何保持图片文件名不变?

【问题讨论】:

  • 你有S3桶的存储方法吗

标签: python django


【解决方案1】:

您可以尝试从 S3BotoStorage 继承并重新定义 get_available_name 方法:

class MyS3BotoStorage(S3BotoStorage):
    def get_available_name(self, name):
        return name

【讨论】:

  • 我试过了。它仍然一样 - 在上传图像文件之前删除所有 @s。
【解决方案2】:

我没有将字符串作为upload_to='s3_bucket_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)

现在它可以正常工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    • 2015-12-15
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    相关资源
    最近更新 更多