2010-07-12 20 views
7

Ho notato che il nuovo oggetto XMLHttpRequest supporta un evento "onprogress" in firefox. È possibile utilizzare parte delle nuove API di file HTML5 per ottenere una barra di avanzamento del caricamento senza che siano necessarie modifiche sul lato server?Avanzamento caricamento file HTML5 - lato client solo

+0

dovresti leggere questo articolo per avere più conoscenza sul fare cose sul lato client, http://www.html5rocks.com/en/tutorials/file/dndfiles/ –

risposta

2

Credo in principio si, anche se non l'ho ancora provato.

Quello che sta per essere un problema è che XMLHttpRequest#send() prende una stringa Unicode e lo codifica come UTF-8. Non ti dà la possibilità di inviare file binari puri, e la maggior parte dei file binari come le immagini non si presenteranno come sequenze UTF-8 valide.

Quindi probabilmente usereste ciò che la specifica FileAPI chiama una "stringa binaria" (byte trattati come ISO-8859-1, quindi ogni charCodeAt corrisponde a un byte), ricodificati in UTF-8. Questo sarebbe circa il 50% più grande di un semplice caricamento di file. Vale la pena caricarlo più lentamente per ottenere il rapporto sui progressi?

(Dio, se solo i browser avessero un'interfaccia utente migliore per mostrare come stava andando il caricamento, nessuna delle infinite sciocchezze di scripting/Flash/Java/ActiveX sarebbe mai stata necessaria. Dai, venditori di browser, è un bel grande info popup con una barra di avanzamento davvero troppo da chiedere?)

+1

AFAIK, Chrome mostra l'avanzamento del caricamento in quel piccolo barra di stato sinistra. Non ne sono sicuro, ma penso che Opera mostri anche il progresso del caricamento nella barra di avanzamento. –

0

Sì, in teoria, anche se dovrei mettere in discussione l'accuratezza in quanto la velocità di Internet generalmente fluttua (più così se non sei cablato). Probabilmente salterebbe molto.

Ancora una volta, cosa è una barra di avanzamento accurata? Mi piacerebbe vederne uno in Windows prima di vederne uno online!

+0

Inoltre: se sei dietro un proxy HTTP che si trova dietro una connessione più lenta, il client avrà finito di inviare tutti i dati prima che il proxy abbia finito di caricarlo sul server remoto. –