-
1. Data: 2014-08-22 23:13:24
Temat: Drag and drop upload nie działa
Od: Marek <p...@s...com>
Witam,
Nie wiem w czym rzecz. W HTML zrobiłem DIV'a reagującego na
przeciągnięcie plików. JS przechwytuje zdarzenie upuszczenia plików na
tym DIVie.
Fragment kodu jest następujący:
case "drop":
files = ev.dataTransfer.files;
fd=new FormData();
for(i=0, f; f = files[i]; i++) fd.append("files[]",f);
xhr.open("POST","mojSkrypt.php",true);
xhr.send(fd);
break;
gdzie:
xhr = new XMLHttpRequest();
Gdy skrypt wykonuje się do serwera idą nagłówki (IE11):
Żądanie POST /publisher/mojSkrypt.php HTTP/1.1
Accept */*
Content-Type multipart/form-data;
boundary=---------------------------7de3db2f2b1910
Referer https://xxxx.pl/yyy.php
Accept-Language pl
Accept-Encoding gzip, deflate
User-Agent Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0)
like Gecko
Host xxxx.pl
Content-Length 1039469
DNT 1
Connection Keep-Alive
Cache-Control no-cache
Cookie rozne cookies
Widać, że niby idą obrazki zawarte w files. Długość contentu jest
odzwierciedleniem, że niby coś zgromadzono i zależy od ilości
załączonych plików. Jednakże do skryptu PHP nic nie dociera w zmiennych
POST.
Natomiast gdy przed wysłaniem dodam:
fd.append("files[]","aaa");
fd.append("files[]","bbb");
to po stronie serwera otrzymam, że files to array(2)= ["aaa","bbb]. Co
ciekawe, zrobiłem podgląd w JS tego co chcę wysłać:
reader = new FileReader();
reader.addEventListener("load",this.addToPreview.bin
d(this));
reader.readAsDataURL(file);
No i obrazki wyświetlają się po stronie HTML dzięki metodzie
addToPreview(), która wstawia w HTML obiekt Image z src=ev.target.result
Czyli od strony kodu JS wszystko ok. Czy istnieją jakieś dodatkowe
wymogi od strony kodu HTML? Czy musi tam być jakiś formularz
bezwzględnie aby kod ożył i przesłał dane z plików? Czy jakieś specjalne
nazwy pól mają tam też być? A może to wina IE11, w którym coś nie działa?
--
Pozdrawiam
Marek
-
2. Data: 2014-08-23 15:33:34
Temat: Re: Drag and drop upload nie działa
Od: Marek <p...@s...com>
Wszystko już działa jak należy. Poszło o to, że debugger w IE11 ukrywa
dane POST w przypadku gdy wysyłamy FormData jako argument xhr.send().
Zasugerowałem się tym i błędnie uznałem, że nie wychodzą żadne dane.