使用django HttpResponse返回二进制数据

时间:2014-03-08 23:37:01

标签: python django string binary httpresponse

我试图让Django的HttpResponse返回二进制数据而没有太大的成功。我一直尝试不同的方法,但没有成功。

只要二进制数据值不在ASCII字符范围之外,

将字符串编码为ASCII就可以工作,该范围小于0-255。使用latin-1编码时也是如此。

创建字节字符串很有效,但如果包含某些值,似乎会失败,例如,如果我在数据中包含以下字节:“\ xf6 \ x52”,我将得到不同的字节作为结果。出于某种原因,当我试图查看结果响应时,第一个字节\ xf6被转换为0xfffd。

我很乐意得到一些反馈和帮助。

非常感谢!

-A -

3 个答案:

答案 0 :(得分:3)

return HttpResponse(data, content_type='application/octet-stream')

为我工作。

答案 1 :(得分:0)

只需将数据转换为字符串。

return HttpResponse(str(data), 'image/jpeg')

答案 2 :(得分:0)

从 Django 返回二进制数据的一种灵活方法是首先使用 Base64 对数据进行编码。

<块引用>

Base64 是一组类似的 binary-to-text encoding 方案,通过将二进制数据转换为基数 64 表示来表示 ASCII 字符串格式的二进制数据。

由于 Base64 编码的数据是 ASCII,text/html; charset=utf-8 的默认 HTTP 响应内容类型可以正常工作。

图片示例

姜戈

import base64
from io import BytesIO

from django.http import HttpRequest, HttpResponse
import PIL.Image


def image_test(request: HttpRequest) -> HttpResponse:
    image_data = PIL.Image.open('/path/to/image.png')
    file_stream = BytesIO()
    image.save(file_stream)
    file_stream.seek(0)
    base64_data = base64.b64encode(file_stream.getvalue()).decode('utf-8')
    return HttpResponse(base64_data)

网络浏览器

从 Django 获取 data 后,base64 数据可用于创建 data URL


// `data` fetched from Django as Base64 string
const dataURL = `data:image/png;base64,${data}`;
const newImage = new Image();
newImage.src = dataURL;
$('#ImageContainer').html(newImage);

JSON 响应

Base64 数据也可能作为 JSON 响应的一部分返回:

import base64
from io import BytesIO

from django.http import HttpRequest, JsonResponse
import PIL.Image

def image_test(request: HttpRequest) -> JsonResponse:
    image_data = PIL.Image.open('/path/to/image.png')
    file_stream = BytesIO()
    image.save(file_stream)
    file_stream.seek(0)
    base64_data = base64.b64encode(file_stream.getvalue()).decode('utf-8')
    json_data = dict()
    json_data['base64Data'] = base64_data
    return JsonResponse(json_data)