Hallo Rolf,
eigentlich fand ich das ganz nett, dass bei der Fortschrittsanzeige des Uploads nicht immer nur eine Datei nach der anderen hochgeladen wird.
Für den Upload erstelle ich für jede Datei eine eindeutige ID ($file_id), merke mir die Anzahl der benötigten Chunks ($num_chunks_created) und jeder Chunk erhält eine fortlaufende Nummer.
im PHP-Upload-Script speichere ich den aktuellen Chunk, zähle dann, ob alle Chunks vorhanden sind ($chunksUploaded) und merge sie dann wieder zusammen.
if ($chunksUploaded == $num_chunks_created) {
for ($i = 1; $i <= $num_chunks_created; $i++) {
$chunkname = $target_path.$chunk_location.$file_id.'-'.$i.$extension;
$file = fopen($chunkname, 'rb');
$buff = fread($file, filesize($chunkname));
fclose($file);
$final = fopen($target_file, 'ab');
$write = fwrite($final, $buff);
fclose($final);
unlink($target_path.$chunk_location.$file_id.'-'.$i.$extension);
}
}
Die Funktion send() sieht im Moment so aus:
function send(piece,start,end,scount,size,num_of_slices,ext,filename,chunkid) {
var formdata = new FormData();
var xhr = new XMLHttpRequest();
xhr.open('POST', 'upload.php', true);
formdata.append('MAX_FILE_SIZE', 1000000);
formdata.append('start', start);
formdata.append('end', end);
formdata.append('file', piece, filename);
formdata.append('scount', scount);
formdata.append('fsize', size);
formdata.append('num_of_slices', num_of_slices);
formdata.append('ext', ext);
formdata.append('filename', filename);
formdata.append('chunkid', chunkid);
formdata.append('folder', folder);
xhr.upload.onerror = function() {
alert("Error during upload! "+xhr.status);
};
xhr.upload.onprogress = function (e) {
// updateProgressFile(filename, e.loaded, proz);
};
xhr.onload = function() {
console.log(xhr.responseText); // debug info
updateProgressTotal(filename);
checkcompleted();
};
xhr.send(formdata);
}
Auf fetch umzustellen oder sicherzustellen, dass immer nur 1 Upload läuft, wird wohl mein aktuelles Problem nicht lösen, da ja der Upload bei einer kleinen Chunk-Größe (0,23MB) funktioniert und bei einer Größe von 2,38MB nicht mehr. Meine Vermutung war, dass das Slice nicht schnell genug ist, aber wenn nicht, dann weiß ich nicht, warum die Größe des Chunks einen Unterschied macht.
LG Steffen