我试图让Django的HttpResponse返回二进制数据而没有太大的成功。我一直尝试不同的方法,但没有成功。
只要二进制数据值不在ASCII字符范围之外,将字符串编码为ASCII就可以工作,该范围小于0-255。使用latin-1编码时也是如此。
创建字节字符串很有效,但如果包含某些值,似乎会失败,例如,如果我在数据中包含以下字节:“\ xf6 \ x52”,我将得到不同的字节作为结果。出于某种原因,当我试图查看结果响应时,第一个字节\ xf6被转换为0xfffd。
我很乐意得到一些反馈和帮助。
非常感谢!
-A -
答案 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);
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)