Działa to w przeglądarkach Firefox 28+, Chrome 38+ i Opera 25+, jednak Safari i IE nadal nie implementują dziś tego konstruktora (patrz caniuse.com/#feat=fileapi ). Obecnie szukam wypełnienia polyfill lub sposobu na jego emulację, ale do tej pory nie znalazłem odpowiedniego rozwiązania.
@ PA.Buisson Nie jestem pewien, czy to odnosi się do wszystkich przypadków (to był wystarczający dla mnie), ale można użyć Blob () konstruktora zamiast, jak sugeruje tutaj
W przypadku przeglądarki IE11 można użyć klasy Blob do skonstruowania obiektu File. Wydaje mi się, że jest to najbardziej przenośne rozwiązanie. file = new Blob([blobdata], {type: filetype, lastModified: filelastModified}); file.name = filename
var parts =[newBlob(['you construct a file...'],{type:'text/plain'}),' Same way as you do with blob',newUint16Array([33])];// Construct a filevar file =newFile(parts,'sample.txt',{
lastModified:newDate(0),// optional - default = now
type:"overide/mimetype"// optional - default = ''});var fr =newFileReader();
fr.onload =function(evt){
document.body.innerHTML = evt.target.result +"<br><a href="+URL.createObjectURL(file)+" download="+ file.name +">Download "+ file.name +"</a><br>type: "+file.type+"<br>last modified: "+ file.lastModifiedDate
}
fr.readAsText(file);
BlobBuilder został przestarzały, zobacz, jak go używasz, jeśli używasz go do celów testowych.
W przeciwnym razie zastosuj poniższe strategie migracji do Bloba , takie jak odpowiedzi na to pytanie .
Zamiast tego użyj obiektu Blob
Alternatywnie istnieje Blob , którego można użyć zamiast File, ponieważ jest to interfejs pliku, zgodnie ze specyfikacją W3C :
interfaceFile:Blob{
readonly attribute DOMString name;
readonly attribute Date lastModifiedDate;};
Interfejs File jest oparty na obiekcie Blob, dziedzicząc funkcjonalność obiektu BLOB i rozszerzając go w celu obsługi plików w systemie użytkownika.
Utwórz obiekt Blob
Użycie BlobBuilder w ten sposób w istniejącej metodzie JavaScript, która pobiera plik do przesłania za pośrednictwem XMLHttpRequesti dostarczenie do niego obiektu Blob, działa dobrze w następujący sposób:
varBlobBuilder= window.MozBlobBuilder|| window.WebKitBlobBuilder;var bb =newBlobBuilder();var xhr =newXMLHttpRequest();
xhr.open('GET','http://jsfiddle.net/img/logo.png',true);
xhr.responseType ='arraybuffer';
bb.append(this.response);// Note: not xhr.responseText//at this point you have the equivalent of: new File()var blob = bb.getBlob('image/png');/* more setup code */
xhr.send(blob);
Rozszerzony przykład
Pozostała część próbki znajduje się na jsFiddle w bardziej kompletny sposób, ale nie zostanie pomyślnie przesłana, ponieważ nie mogę ujawnić logiki przesyłania na dłuższą metę.
Evestigneev, źle zinterpretowałeś wyniki, ponieważ obsługiwane przeglądarki mają globalne wykorzystanie około 0,2%. Ta liczba pokazuje, ile przeglądarek korzysta z interfejsu API, podczas gdy sama Edge / IE stanowi około 15% przeglądarek nadal w użyciu.
Na przykład w celu retransmisji już załadowanego formularza graficznego podczas aktualizacji produktu, wraz z dodatkowymi zdjęciami dodanymi podczas aktualizacji
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.
Illegal constructor
na Chrome 37 / Ubuntu, więc nie, nie działa