2017-06-16 1 views
2

J'ai cette vue, qui prend un id_utilisateur et image_id. Lorsque l'utilisateur clique sur le lien, vérifiez s'il y a une image. Si c'est le cas, je voudrais que le fichier force le téléchargement automatiquement.Comment forcer télécharger une image sur clic avec django et aws s3

modèle:

<a class="downloadBtn" :href="website + '/download-image/'+ user_id+'/'+ image_id +'/'">Download</a> 

Avant que je développais dans ma machine locale, et ce code fonctionnait. Mais maintenant j'utilise aws s3 pour mes fichiers statiques et multimédias. Maintenant, j'utilise aws s3 pour mes fichiers statiques et multimédias. J'utilise django-stockages et boto3. Comment puis-je forcer le téléchargement de l'image dans le navigateur?

@api_view(['GET']) 
@permission_classes([AllowAny]) 
def download_image(request, user_id=None, image_id=None): 
    try: 
     ui = UserImage.objects.get(user=user_id, image=image_id) 
     url = ui.image.url 
     ... 
     ... FORCE DOWNLOAD THE IMAGE 
     ... 
    except UserImage.DoesNotExist: 
     ... 
     ... ERROR, NO IMAGE AVAILABLE 
     ... 
+0

J'ai fait quelque chose comme ça utiliser xsendfile avec apache2, est-ce utile? – Ykh

+0

@Ykh Merci, mais je ne suis pas si sûr. – Kakar

Répondre

0

Vous pouvez simplement renvoyer une réponse HttpResponse avec l'image elle-même.

return HttpResponse(instance.image, content_type="image/jpeg") 

Ceci retournera le flux d'octets de l'image. L'en-tête Content-type est d'afficher les images dans des plates-formes comme Postman.

+0

Cela ne télécharge pas l'image, à la place il affiche en tant que partie html régulière. Aussi ce n'est pas l'image réelle. – Kakar