use*_*420 3 python string django binary httpresponse
我正在尝试让Django的HttpResponse返回二进制数据,但没有成功。我已经尝试了一段时间的不同方法,但没有成功。
只要二进制数据值不在ASCII字符范围(小于0-255)的范围内,就可以将字符串编码为ASCII。使用latin-1进行编码时也发生了同样的情况。
创建字节字符串效果很好,但是如果包含某些值,则创建失败,例如,如果我在数据中包含以下字节:“ \ xf6 \ x52”,结果将得到不同的字节。由于某种原因,当我尝试查看结果响应时,第一个字节\ xf6被转换为0xfffd。
我希望获得一些反馈并为此提供帮助。
非常感谢!
-一种-
return HttpResponse(data, content_type='application/octet-stream')
Run Code Online (Sandbox Code Playgroud)
为我工作。
从 Django 返回二进制数据的一种灵活方法是首先使用Base64对数据进行编码。
Base64 是一组类似的二进制到文本的编码方案,通过将 ASCII 字符串格式的二进制数据转换为 radix-64 表示形式来表示二进制数据。
由于 Base64 编码的数据是 ASCII,因此默认的 HTTP 响应内容类型text/html; charset=utf-8
可以正常工作。
import base64
from io import BytesIO
from django.http import HttpRequest, HttpResponse
import PIL.Image
def image_test(request: HttpRequest) -> HttpResponse:
file_stream = BytesIO()
image_data = PIL.Image.open('/path/to/image.png')
image_data.save(file_stream)
file_stream.seek(0)
base64_data = base64.b64encode(file_stream.getvalue()).decode('utf-8')
return HttpResponse(base64_data)
Run Code Online (Sandbox Code Playgroud)
从 Django获取后data
,base64 数据可用于创建数据 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);
Run Code Online (Sandbox Code Playgroud)
Base64 数据也可以作为 JSON 响应的一部分返回:
import base64
from io import BytesIO
from django.http import HttpRequest, JsonResponse
import PIL.Image
def image_test(request: HttpRequest) -> JsonResponse:
file_stream = BytesIO()
image_data = PIL.Image.open('/path/to/image.png')
image_data.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)
Run Code Online (Sandbox Code Playgroud)