通过Django Rest发送文件

sor*_*ike 6 python django storage django-rest-framework

我需要从不同的对象存储桶下载图像对象,并通过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")
Run Code Online (Sandbox Code Playgroud)

data 变量包含字节类型.

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

什么可以解决这个问题?

Wil*_*ing 6

如果您希望将图像直接通过Django Rest Framework传递给用户,那么使用它可能更合适HttpResponse.

from django.http import HttpResponse

...

return HttpResponse(data, content_type="image/png")
Run Code Online (Sandbox Code Playgroud)

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


Anu*_*dav 1

您需要导入 Base64 并将字节数据转换为 Base64 编码格式,才能解决该问题。

import base64 
data = base64.b64encode(data)
Run Code Online (Sandbox Code Playgroud)

==== 或 =====

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

from django.http import HttpResponse

return HttpResponse(data, content_type="image/png")
Run Code Online (Sandbox Code Playgroud)