2016-03-04 46 views
5

Mam blob. Jest to obraz, który zmieniłem rozmiar przy użyciu <canvas>. Sprawdziłem, czy dane są poprawne, konwertując je na adres URL, aby przetestować go zgodnie z the MDN guide. Jak na razie dobrze. Teraz chciałbym opublikować go na moim serwerze Django (wraz z kilkoma innymi danymi wejściowymi).Jak publikować i pobierać blob z Django

Więc to zrobić:

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

I sprawdzić wiadomości POST z konsolą inspektora sieci. Mój obiekt blob jest potwierdzany jako wysłany z żądaniem POST i widzę dane binarne wysyłane jako pole "image0".

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

Więc obsłużyć żądania POST z tym poglądem, dostępnym pod adresem URL /ajax-upload/:

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

To daje mi niczego. Kiedy dowiem się, gdzie trafił mój blob, jak mogę go przekształcić w Image? Coś takiego jak img = Image.open(request.POST["image0"])?

+0

co jest zwracane w żądaniu. PŁATKI? – Jerzyk

+0

request.FILES wydaje się być pusty: '' – Escher

Odpowiedz

2

Blob to dane binarne, dzięki czemu można je znaleźć w Django w wersji request.body. Jego kodowana jest Bytes (nie w Unicode).

HttpRequest.body Surowe ciało żądania HTTP jako ciąg bajtów. Jest to przydatne do przetwarzania danych na różne sposoby niż konwencjonalne formularze HTML: obrazy binarne, ładunek XML itp.

+1

Proszę połączyć swoje źródło. –

+0

@J F - Kliknij łącze w 'HttpRequest.body' i myślę, że znajdziesz @ C14L zrobił już to, o co prosiłeś. – jwpfox