2017-04-04 29 views
1

我有一个Django模型,它将文件名保存为“uuid4()。pdf”。 uuid4为每个创建的实例生成一个随机uuid。这个文件名也存储在亚马逊S3服务器上,名称相同。在python中为文件名(amazon S3)添加动态内容处理

我想添加一个自定义处置文件名,我上传到亚马逊s3,这是因为我想看到一个自定义名称,只要我下载文件不uuid一个。同时,我想用uuid文件名将文件存储在s3上。

所以,我用python 2.7使用django-storages。我曾尝试加入content_disposition的设置是这样的:

AWS_CONTENT_DISPOSITION = 'core.utils.s3.get_file_name' 

其中get_file_name()返回的文件名。

我也尝试添加这设置:

AWS_HEADERS = { 
'Content-Disposition': 'attachments; filename="%s"'% get_file_name(), 

} 

没有运气!

你们中的任何人都知道要实现这一点。

回答

0

我猜你正在使用S3BotoStorageDjango的存储器,因此当文件上传到S3,覆盖模型的save()方法,并设置页眉那里。

我给下面的例子:

class ModelName(models.Model): 
    sthree = S3BotoStorage() 
    def file_name(self,filename): 
     ext = filename.split('.')[-1] 
     name = "%s/%s.%s" % ("downloads", uuid.uuid4(), ext) 
     return name 
    upload_file = models.FileField(upload_to=file_name,storage = sthree) 
    def save(self): 
     self.upload_file.storage.headers = {'Content-Disposition': 'attachments; filename="%s"' %self.upload_file.name} 
     super(ModelName, self).save()