通过Django Rest发送文件

7
我需要从不同的对象存储桶中下载图像对象,并通过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'编解码器无法解码0x89位置的字节:无效的起始字节

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


请提供堆栈跟踪和Python版本。 - JoseKilo
1
import base64
data = base64.b64encode(data)
- Anup Yadav
@AnupYadav 编码数据是有效的。在测试时,我收到了状态代码= 200。 但是是否有其他发送图像的可能性,而不使用base64库? - sorryMike
太好了!您想让我将此解决方案作为答案放置,以便您可以接受吗?除此之外,我没有其他的解决方案。 - Anup Yadav
请在问题下方评论,而不是用@AnupYadav方法回复您的帖子。 - sorryMike
显示剩余2条评论
2个回答

11

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

from django.http import HttpResponse

return HttpResponse(data, content_type="image/png")

Django Rest Framework的Response会尝试呈现二进制数据,这可能会导致您看到的编码问题。


1

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

import base64 
data = base64.b64encode(data)

==== 或者 =====

我尊重@Will Keeling的回答,也希望在我的帖子中加入这个内容。

from django.http import HttpResponse

return HttpResponse(data, content_type="image/png")

负面标记告诉我原因。没有原因看起来不道德。 - Anup Yadav

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