2016-03-04 17 views
5

我有一个blob。这是我使用<canvas>调整大小的图像。我已通过将其转换为网址来验证数据是否正确,以根据the MDN guide进行测试。到现在为止还挺好。现在,我想将它发布到我的Django服务器(以及其他一些输入)。如何使用Django发布和检索blob

所以我这样做:

var fd = new FormData(form); 
canvas.toBlob(function(blob) { 
    fd.set("image0", blob, "image0.jpg"); 
}, "image/jpeg", 0.7); 
var xhr = new XMLHttpRequest(); 
xhr.open('POST', '/ajax-upload/', true); 
xhr.setRequestHeader("X-CSRFToken", csrftoken); 
xhr.send(fd); 

我检查与网络检查控制台中的POST消息。我的blob被确认为与POST请求一起发送,我可以看到二进制数据作为“image0”字段发送。

-----------------------------1773139883502878911993383390 
Content-Disposition: form-data; name="image0"; filename="blob" 
Content-Type: image/png 

所以我处理这个观点POST请求,在URL /ajax-upload/访问:

def ajax_upload(request): 
    if request.method == 'POST': 
     print(request.POST.urlencode()) 

这给了我什么。一旦我发现我的blob去了哪里,我怎么能把它变成Image?像img = Image.open(request.POST["image0"])

+0

什么是request.FILES回来了? – Jerzyk

+0

request.FILES显示为空:'' – Escher

回答

2

blob是二进制数据,所以你可以在Django的request.body找到它。它的编码为Bytes(不是Unicode)。

HttpRequest.body HTTP请求的原始体作为字节串。这是比传统的HTML表单不同的方式处理数据的有用:二进制图像,XML有效载荷等

+1

请链接您的源代码。 –

+0

@J F - 点击'HttpRequest.body'链接,我想你会发现@ C14L已经完成了你的要求。 – jwpfox