1

J'ai un modèle Django qui enregistre le nom de fichier comme "uuid4(). Pdf". Où uuid4 génère un uuid aléatoire pour chaque instance créée. Ce nom de fichier est également stocké sur le serveur amazon s3 avec le même nom. J'essaye d'ajouter une disposition faite sur commande pour le nom de fichier que je télécharge à amazon s3, c'est parce que je veux voir un nom fait sur commande chaque fois que je télécharge le dossier pas le uuid. En même temps, je veux que les fichiers soient stockés sur s3 avec le nom de fichier uuid. Donc j'utilise django-storages avec python 2.7. Je l'ai essayé d'ajouter content_disposition dans des contextes comme celui-ci:Ajouter Dynamic Content Disposition pour les noms de fichiers (amazon S3) en python

AWS_CONTENT_DISPOSITION = 'core.utils.s3.get_file_name' 

où retourne le nom du fichier get_file_name().

J'ai également essayé d'ajouter ceci aux paramètres:

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

} 

pas de chance!

Est-ce que quelqu'un d'entre vous sait mettre en œuvre cela.

Répondre

0

Je suppose que vous utilisez S3BotoStorage de django-entrepôts, donc en téléchargeant le fichier à S3, remplacer la méthode save() du modèle, et définir l'en-tête là.

Je donne un exemple ci-dessous:

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()