如何使用django和aws s3强制下载图像

时间:2017-06-16 08:23:29

标签: django amazon-s3 boto3 django-storage

我有这个视图,它带有user_id和image_id。当用户cliks链接时,检查是否有图像。如果有,那么我希望该文件自动强制下载。

模板:

<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-storages和boto3。如何强制在浏览器中下载图像?

@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
        ...

1 个答案:

答案 0 :(得分:-1)

您只需返回带有图像本身的HttpResponse。

master.dacpac

这将返回图像的字节流。 Content-type标题用于在Postman等平台中显示图像。