2016-03-04 15 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