Ankündigung

Einklappen
Keine Ankündigung bisher.

Ajax POST mit größeren Dateien

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Ajax POST mit größeren Dateien

    Hallo,
    Ich habe ein Dropzone Upload programmiert. An sich funktioniert es auch ganz gut. Hier das Javascript der Upload funktion

    Code:
    dropzone.ondrop = function(e) {
                        e.preventDefault();
                        this.className = 'dropzone';
                        var file = e.dataTransfer.files[0];
                        var formdata = new FormData();
                        formdata.append("file", file);
                        var ajax = new XMLHttpRequest();
                        ajax.upload.addEventListener("progress", progressHandler, false);
                        ajax.addEventListener("load", completeHandler, false);
                        ajax.addEventListener("error", errorHandler, false);
                        ajax.addEventListener("abort", abortHandler, false);
                        ajax.open("POST", "/scripts/upload_picture.php");
                        ajax.send(formdata);
    
                        function progressHandler(event) {
                            console.log(event.loaded+"/"+event.total);
                        }
                        function completeHandler(event) {
                            var result = event.target.responseText;
                            if(result.substr(0,2) == "OK") {
                                var img = result.substr(3,result.length-3);
                                document.getElementById("profile-picture").style.backgroundImage = "url('"+img+"')";
                            }
                            console.log(event.target.responseText);
                        }
                        function errorHandler(event) {
                            console.log("upload failed");
                        }
                        function abortHandler(event) {
                            console.log("upload aborted");
                        }
                    };
    Wie man sieht soll der Upload starten, sobald der User die Datei gedropt hat. Bei kleineren Dateien funktioniert das auch. Bei größeren Dateien bekomme ich von der php aber zurück, dass keine Datei ausgewählt wurde. Ich vermute, dass das senden viel zu schnell ausgelöst wird und das Auslesen der Datei noch nicht beendet ist. Dadurch ist sie auch noch nicht angehängt und das Ajax wird ohne Datei gesendet. Wie kann ich ein Event programmieren der darauf wartet dass die Datei ordentlich geladen wird?

  • #2
    Der Upload von grösseren Dateien, in der Regel über 2MByte kann schon recht lästig sein. Zu deinem angesprochenen Problem gesellt sich noch die Einschränkung auf dem Server. Hat man das mit dem Server in den Griff bekommen und wechselt diesen, geht das Spielchen von vorne los.
    Das haben wohl auch die Entwickler erkannt und eine Lösung entwickelt.

    Die FileReader Api macht nun Schluss mit dem Herumgebastel.

    Das Prinzip wird hier beschrieben und wenn du nicht selber Hand anlegen willst, dann greifst du zu einer Fertiglösung.

    Kommentar


    • #3
      Danke. An die Uploadbeschränkung habe ich garnicht gedacht.
      An sich habe ich kein problem mit einer beschränkung. Das macht sogar sinn. Allerdings wollte ich verstehen wo das Problem liegt. Ich habe die upload_max_size in der php.ini erhöht und es funktioniert. Danke. Aber auch gut zu wissen dass es lösungen dagegen gibt. für ein Backend eine gute Sache.

      Kommentar

      Lädt...
      X