2016-03-04 14 views
5

Ho un blob. È un'immagine che ho ridimensionato usando uno <canvas>. Ho verificato che i dati siano corretti convertendoli in un URL per testarlo come da the MDN guide. Fin qui tutto bene. Ora vorrei pubblicarlo sul mio server Django (insieme ad altri input).Come pubblicare e recuperare blob con Django

così faccio questo:

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); 

ho ispezionare il messaggio POST con la console di rete ispettore. Il mio blob viene confermato come inviato con la richiesta POST e posso vedere i dati binari inviati come campo "image0".

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

Così ho gestire la richiesta POST con questa visione, accessibile tramite l'URL /ajax-upload/:

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

Questo mi dà niente. Una volta che ho scoperto dove è andato il mio blob, come posso trasformarlo in un Image? Qualcosa come img = Image.open(request.POST["image0"])?

+0

ciò che viene restituito in request.FILES? – Jerzyk

+0

request.FILES sembra vuoto: '' – Escher

risposta

2

Un blob è dati binari, quindi è possibile trovarlo nello strumento request.body in Django. La sua codifica Bytes (non Unicode).

HttpRequest.body Il corpo della richiesta HTTP crudo come una stringa di byte. Questo è utile per l'elaborazione dei dati in modo diverso rispetto a moduli HTML convenzionali: le immagini binarie, payload XML ecc

+1

Si prega di collegare la fonte. –

+0

@ J F - Fai clic sul link su "HttpRequest.body" e penso che troverai che @ C14L ha già fatto ciò che hai chiesto. – jwpfox

Problemi correlati