Split-Datei mit JavaScript oder jQuery
Brauche ich zum hochladen von einem Teil einer Datei (nur das erste MB). Ich habe ein PHP-script, das lädt die ganze Datei. Die Daten (formData
- Objekt) übergeben wird durch einen ajax-Aufruf.
Meine Idee wäre nun teilen Sie die Datei mit javascript (jquery). Gibt es eine Lösung für meine Anfrage?
Aktuelle code:
function start(a){
//var fSize = $('#fileUpload')[0].files[0].size /1024;
var formData = new FormData();
formData.append( 'fileUpload', $('#fileUpload')[0].files[0] );
//AJAX
$.ajax({
url: 'script.php',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function(msg){
alert("Win: " + msg);
},
error: function(bla, msg){
alert("Fail: " + msg);
}
});
}
- Sie haben keinen Zugriff auf die Inhalt-Datei im JavaScript. Es gibt keinen Weg, um es zu teilen. Und BTW es gibt keinen Weg zur post eine Datei mit AJAX entweder.
- Warum nicht Sie es post als Antwort?
- Naja, eigentlich gibt ' s einen Weg - mit dem neuen FileReader-API. Aber irgendwie denke ich es ist hier nicht relevant. )
- Ich nehme an diesem Artikel für Sie nützlich sein könnte. Beachten Sie jedoch, dass Werkzeuge verwendet werden, sind nicht universell unterstützt... noch.
- ehm, das Skript oben funktioniert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da Sie mit
FormData
, das ist eine relativ neue Technologie, ich werde Ihnen zeigen, etwas mit neuen Technologien sowie.Lesen Sie zuerst die Datei mit einem
FileReader
Objekt:Dann können Sie eine
Blob
für jeden geschlitzter Teil (1e6
bytes lang jeweils):Schließlich können Sie fügen Sie alle Ihre
Blob
s auf IhreFormData
Objekt:Sollten Sie ok sein. Ich habe es noch nicht getestet, aber.
Ich weiß nichts über die Leistung. Sie können
fr.readAsBinaryString
zu, damite.target.result
einen string. Auf diese Weise können Sie erstellen, dieBlob
s mit einem einfachensubstring
/slice
/substr
/was auch immer, aber ich fürchte, es könnte einige Probleme mit Unicode-Zeichen und so weiter. Plus, vielleicht ist es langsamer.Setzen alles auf eine kohärentere snippet:
Hinweis:
FormData.append
nimmt einen Dritten, optionalen parameter, mit dem sollte der name der Datei im Falle vonFile
oderBlob
Werte. Wenn nicht angegeben, wirdBlob
s bekommen kann unvorhersehbare zufällige Dateinamen.Wahrscheinlich, dass die parameter nicht standard, und es ist nicht erwähnt in der MDN Artikel, aber ich habe es in dem snippet oben dennoch. Sowieso, wenn Sie wissen, was Sie tun, Sie können mehrere Optionen angeben, um die Datei name. Zum Beispiel, mit
formData.append("filename", file.name)
oder senden Sie eine benutzerdefinierte header in der Anforderung.blob.push(...
Linie. Vergessene schließende Klammer, mein schlechtes. Sie können es erneut versuchen.FormData
noch XHR2-Anfragen, so sind Sie kein Glück mit diesem Haufen code. Wenn Ihr Ziel war es zu zeigen, ein Fortschrittsbalken, dann könnten Sie nur verlassen sich auf dieonprogress
Veranstaltung derupload
Mitglied des XHR-Objekt, bekommen ein viel besseres Ergebnis als alle die Schmerzen haben wir durch. Als für den Fortschritt-bar, würde ich vorschlagen, verwenden einige gemeinsame jQuery-plugins, zum Beispiel die Statusanzeige von jQuery UI, die wie in einer "offiziellen" widget-Bibliothek jQuery. (BTW, können Sie akzeptieren Sie meine Antwort, wenn es dir geholfen?)