Gow*_*ham 4 django amazon-s3 boto django-storage
我有一个模型,Profile并ImageField与之相关联.
使用和将映像上载到AWS S3存储桶以进行存储.django-storagesboto
如果我上传一个文件名已经存在的图像(eg: sample.png)Django默认会保存新文件,sample_1.png因为在将图像上传到AWS S3时它不起作用.有没有办法解决这个问题?
如何在AWS S3不覆盖的情况下上传具有现有文件名的图像?
鉴于您已在settings.MYMODEL_FILES_LOCATION中定义了存储桶位置,您可以使用以下命令在任意位置重命名上载的文件,这可能是从原始文件名派生的.下面的代码片段将节省/ mymodelfiles的文件/文件.该模型实例属性可以从重命名方法的实例对象访问,这样你就可以例如,在同一用户上传文件相同的子目录下.
import uuid
import os
from django.utils.deconstruct import deconstructible
from storages.backends.s3boto import S3BotoStorage
from django.db import models
from django.conf import settings
def path_and_rename(prefix, filename):
ext = filename.split('.')[-1]
filename = '{}.{}'.format(uuid.uuid4().hex, ext)
return os.path.join(prefix, filename)
def get_path_for_my_model_file(instance, filename):
return path_and_rename('mymodelfiles/', filename)
@deconstructible
class MyS3BotoStorage(S3BotoStorage):
pass
class MyModel(models.Model):
resources = models.FileField(
upload_to=get_path_for_my_model_file,
storage=MyS3BotoStorage(bucket=settings.MYMODEL_FILES_LOCATION))
Run Code Online (Sandbox Code Playgroud)
S3BotoStorage的构造函数可以使用关键字参数"acl"来设置上传文件的权限,例如acl ='private'
| 归档时间: |
|
| 查看次数: |
1193 次 |
| 最近记录: |