2016-05-25 1 views
4

J'essaye de mettre en place une application où les utilisateurs peuvent télécharger leurs fichiers stockés dans un seau S3. Je suis en mesure de mettre en place mon seau, et obtenir le bon fichier, mais il ne sera pas téléchargé, en me donnant la présente erreur: No such file or directory: 'media/user_1/imageName.jpg' Une idée pourquoi? Cela semble être un problème relativement facile, mais je n'arrive pas à le comprendre. Je peux supprimer une image correctement, donc il est capable d'identifier l'image correcte.Télécharger des fichiers S3 avec Boto

Voici mon views.py

def download(request, project_id=None): 
    conn = S3Connection('AWS_BUCKET_KEY', 'AWS_SECRET_KEY') 
    b = Bucket(conn, 'BUCKET_NAME') 
    k = Key(b) 
    instance = get_object_or_404(Project, id=project_id) 
    k.key = 'media/'+str(instance.image) 
    k.get_contents_to_filename(str(k.key)) 
    return redirect("/dashboard/") 
+0

astuce rapide: puisque vous utilisez django, vous pouvez utiliser [django-entrepôts] (http://django-storages.readthedocs.io/en/latest/) il sera plus facile – pleasedontbelong

+0

peut-être que vous devriez utiliser boto3 fichier de téléchargement – mootmoot

Répondre

9

Le problème est que vous téléchargez un répertoire local qui n'existe pas (media/user1). Vous devez soit:

  • Créez le répertoire sur la machine locale d'abord
  • Il suffit d'utiliser le nom de fichier plutôt qu'un chemin complet
  • Utilisez le chemin complet, mais remplacer les barres obliques (/) avec un autre personnage - ce qui garantira l'unicité du nom de fichier sans avoir à créer des répertoires

La dernière option pourrait être obtenue via:

k.get_contents_to_filename(str(k.key).replace('/', '_')) 

Voir aussi: Boto3 to download all files from a S3 Bucket

+0

Pourriez-vous éventuellement me donner un exemple simple. Je relativement nouveau à Boto et AWS. Sinon, c'est très bien. – pepper5319

+0

J'ai ajouté un exemple de code. –

+0

Cette réponse devrait avoir plus de vote. solution la plus simple – roshan