2017-06-16 6 views
2

私はuser_idとimage_idを取るこのビューを持っています。ユーザーがリンクをクリックすると、画像があるかどうかを確認します。もしあれば、ファイルを自動的に強制的にダウンロードしたいと思います。djangoとaws s3をクリックして強制的にイメージをダウンロードする方法

テンプレート:

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

私は私のローカルマシンでそれを開発し、このコードが動作していた前。

@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) 
     content_type = mimetypes.guess_type(ui.image.url) 
     wrapper = FileWrapper(open(str(ui.image.file))) 
     response = HttpResponse(wrapper, content_type=content_type) 
     response['Content-Disposition'] = 'attachment; filename="image.jpeg' 
     return response 
    except UserImage.DoesNotExist: 
     ... 

私は静的ファイルとメディアファイルにaws s3を使用しています。私はdjango-storageとboto3を使用しています。ブラウザで画像を強制的にダウンロードするにはどうすればよいですか?

+0

私はapache2でこのxsendfileを使用するような何かをしました。これは役に立ちましたか? – Ykh

+0

@Ykhありがとうございますが、私はあまりよく分かりません。 – Kakar

答えて

0

イメージ自体でHttpResponseを返すことができます。

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

これは、画像のバイトストリームを返します。 Content-typeヘッダーは、Postmanのようなプラットフォームで画像を表示することです。

+0

これはイメージをダウンロードせず、代わりに通常のhtmlの一部として表示します。実際のイメージでもありません。 – Kakar

関連する問題