2017-04-04 26 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()