Sto lavorando con un'API personalizzata per consentire a un utente di caricare un file (di dimensioni, si spera, arbitrarie). Se il file è di grandi dimensioni, sarà chunkfied e gestito in più richieste al server.Che cosa sta facendo in realtà il metodo File5lice HTML5?
Sto scrivendo il codice che utilizza File
e FileReader
(HTML5) come per molti esempi da online. In generale (da quello che ho letto on-line) per un trasferimento di file chunkfied, la gente prima ottenere un blob di dati dal proprio oggetto file
var file = $('input[type=file]')[0].files[0];
var blob = file.slice(start,end)
Quindi utilizzare un FileReader
di leggere il blob readAsArrayBuffer(blob)
o readAsBinaryString(blob)
E infine nel metodo FileReader.onload(e)
, inviare i dati al server. Ripeti questa procedura per tutti i blocchi nel file.
Le mie domande sono
Perché ho bisogno di usare un FileReader
? Se non lo uso, e semplicemente invio di BLOB con File.slice
, esiste la garanzia che l'operazione di slicing verrà eseguita prima di provare a inviare i dati in ogni richiesta. L'oggetto File
carica l'intero file quando viene creato (sicuramente no?). File.slice
cerca la posizione stabilita dai parametri, quindi leggi le informazioni in? La documentazione non mi dà indicazioni su come è stata implementata.
Grazie per aver definito File per me, questo ha molto più senso. Tuttavia, se utilizzo ancora File.Slice (che restituisce un blob), quindi proverò a inviare il blob al server utilizzando XMLHttpRequest.send (myBlob), come/quando sono i dati recuperati dal file e dati al server . O questo fallirà/non invierà alcun dato? - – Ponml
Ho aggiornato la mia risposta per dare qualche dettaglio in più. Sono entrato in questa roba molto profondamente quando stavo scrivendo la mia utility rsync javascript: https://github.com/claytongulick/bit-sync –