通过 Django Rest 发送文件



我需要从不同的对象存储桶下载图像对象,并通过 Django Rest Framework 将其发送给用户。

我有类似的东西:

if request.method == 'GET':
    # Get object using swiftclient
    conn = swiftclient.client.Connection(**credentials)
    container, file = 'container_name', 'object_name'
    _, data = conn.get_object(container, file)
    # Send object to the browser
    return Response(data, content_type="image/png")

data变量包含字节类型。

测试时收到错误: 'utf-8' codec can't decode byte 0x89 in position 0: invalid start byte

这个问题有什么解决方案?

如果您希望通过

Django Rest Framework 将图像直接传递给用户,使用 HttpResponse 可能更合适。

from django.http import HttpResponse
return HttpResponse(data, content_type="image/png")

Django Rest Framework 自己的Response将尝试渲染二进制数据,这可能会导致您看到的编码问题。

您需要导入 base64 并需要将字节数据转换为 base64 编码格式,以解决此问题。

import base64 
data = base64.b64encode(data)

==== 或 =====

我尊重基林@Will答案,并希望在我的帖子中也有这个答案。

from django.http import HttpResponse
return HttpResponse(data, content_type="image/png")

最新更新