Timing Problem beim JS gesteuerten Download?

Status
Dieses Thema wurde gelöst! Zur Lösung gehen…
Jetzt hatte ich wieder mal einen Aussetzer. Fünf Dateien sollten geladen werden. Beim ersten Mal waren es nur zwei, dann alle fünf und beim dritten Mal drei. Alles innerhalb von drei Minuten. Und wie ich befürchtet hatte, keine Fehlermeldung. Im Netzwertab waren Zugriffseinträge für alle fünf Dateien. Der Server selbst hat im Protokoll aber keine Einträge über unterbrochene Verbindungen.
Ich habe das dann noch ein paar Mal probiert, aber immer das selbe. Mal zwei, Mal fünf, ganz unterschiedlich. 17 andere Dateien, aus dem selben Verzeichnis, werden hingegen alle korrekt geladen. Es sieht völlig willkürlich aus.
 
Mal versuchen, im fetch Fehler abzufangen. Ich bin unterwegs und habe nur das Handy. Vielleicht nimmt sich jemand anders der Sache an.
 
Ich habe das Errorhandling mal in die vorhandene Funktion eingetragen:
Code:
    function download_all(fileidx){
        // Eine Datei herunter laden und speichern:
        function downloadOne(idx) {
            // Die aktuelle Datei mit fetch herunter laden:
            fetch(path + currentFiles[idx]).then(response => {
                if (!response.ok) {
                    throw Error(response.statusText);
                }
                return response.blob();
            }).then(blob => {
                // Der Parameter blob enthält die herunter geladene Datei.
                // Wir speichern sie im lokalen Dateisystem:
                saveAs(blob, currentFiles[idx], {});
                // Existiert eine weitere Datei?
                if (currentFiles[idx + 1]) {
                    // Herunterladen dieser Datei veranlassen:
                    downloadOne(idx + 1);
                }
            }).catch(function(error) {
                console.log(error);
            });
        }
        const files = [];
        files[0] = ["53-0.JPG","53-1.PDF"];
        files[1] = ["53-NP1-0.PDF","53-NP1-1.PDF"];
        files[2] = ["53-NP2-0.JPG","53-NP2-1.PDF","53-NP2-2.PDF"];
        // Die Gruppe von Dateien, die aktuell herunter geladen werden sollen,
        // bereit stellen:
        const currentFiles = files[fileidx];
        const path = '../pruefpdf/74394/74394199/';
        // Das Herunterladen mit der ersten Datei beginnen:
        downloadOne(0);
    }
(ungetestet)
Quelle:
Handling Failed HTTP Responses With fetch()
Versuche, ob das irgend welche Hinweise liefert.
 
Das ganze wird immer merkwürdiger. Wir hatten gerade eben wieder den Fall, daß zwei Dateien von insgesamt sechs nicht heruntergeladen wurden. Der Browser hat aber keine Fehlermeldung registriert. Im Netzwerktab waren alle sechs Dateien als ordnungsgemäß geladen aufgeführt und auch das Serverprotokoll bestätigt das.
 
Dann liegt das Problem anscheinend nicht beim Herunterladen sondern beim Speichern. Ich habe da noch etwas weiter gesucht und dies gefunden:
Allow Multiple File Downloads in Safari
Safari didn't like that the button was being pressed more than one time a second, it registered that the data was there and everything had updated but it only ever triggered the last download, setting a delay between file downloads allowed enough time for Safari to process that there should be multiple files downloaded.
Wahrscheinlich benutzt unser saveAs einen Hilfsbutton und Safari lässt nicht zu, dass der schnell hintereinander gedrückt wird. Dann waren wir bisher auf der falschen Spur, denn wenn die Dateien relativ klein sind, ist das Herunterladen schnell beendet. Wir sollten zu der Lösung mit dem durch setTimeout gestaffelten Herunterladen zurück gehen. Du hattest den Code in Posting #5 gepostet. Vielleicht durch ein console.log prüfen, ob die Staffelung richtig funktioniert.
 
Ich hatte inzwischen auch schon unsere Security darauf angesetzt. Vielleicht waren ja Bitdefender oder Sophos daran Schuld. War aber auch nichts zu finden. Eine Kollegin testet jetzt das ganze mal im Chrome. Wenn es da geht, dann würde das die Safari Theorie stützen. Werde morgen dann wieder die alte Fassung nochmal probieren.
 
Bei Chrome hat das Script funktioniert, aber meine Kollegies nutzen lieber Safari. Und da scheint es mit dem älteren Script zu funktionieren. Zumindest hatten wir in den letzten zwei Stunden keine Aussetzer mehr. Wenn das den Rest des Tages so bleibt, werde ich ab morgen mal versuchen, die Zeit zu reduzieren. Zwei Sekunden sind schon ziemlich lange und eine Kollegin ist sehr ungeduldig.

Ja, es funktioniert jetzt tatsächlich. Vielen Dank nochmal für deine Hilfe!
 
Zuletzt bearbeitet:
Status
Dieses Thema wurde gelöst! Zur Lösung gehen…
Zurück