如何使用Django Rest Framework设置Content-Disposition头部信息

10

我正在使用Django REST框架提供图像服务,但不幸的是它下载而不是显示。我猜我需要设置头部Content-Disposition = 'inline'。我应该如何在ViewRenderer中设置?

class ImageRenderer(renderers.BaseRenderer):
    media_type = 'image/*'
    format = '*'
    charset = None
    render_style = 'binary'

    def render(self, data, media_type=None, renderer_context=None):
        return data

class ImageView(APIView):
    renderer_classes = (ImageRenderer, )

    def get(self, request, format=None):
        image=MyImage.objects.get(id=1)
        image_file = image.thumbnail_png.file
        return Response(image)

1
你确定媒体类型验证接受通配符吗?你试过使用“image/jpeg”进行验证吗? - Ken4scholars
@Ken4scholars,你说得对,当我使用image/png时,它可以直接显示而无需下载。有没有办法让渲染器也支持jpg和png呢? - Ryan
2个回答

8
根据 Django 文档中 此页面 的描述,你可以通过以下方式设置Content-Disposition头部:
response = Response(my_data, content_type='image/jpeg')
response['Content-Disposition'] = 'attachment; filename="foo.jpeg"'

3
如果文件名包含非ASCII字符,则此操作将失败。 - guettli

1
Django 4.2 包含了一个 django.utils.http.content_disposition_header() 方法,用于处理头部的编码和格式化,让你更轻松地操作。查看文档。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接