Ho affrontato questo problema su diversi siti, utilizzando alcune delle tecniche che hai illustrato sopra e alcune che non hai. La buona notizia è che in realtà è piuttosto realistico consentire caricamenti massicci.
Gran parte di ciò dipende da cosa si intende effettivamente fare con il file dopo averlo caricato ... Più lavoro si deve fare sul file, più lo si vorrà vicino al server. Se devi eseguire l'elaborazione immediata sul caricamento, probabilmente vuoi fare una soluzione di puro binario. Se non hai bisogno di eseguire alcuna elaborazione, o non è un fattore critico del tempo, puoi iniziare a considerare soluzioni "ibride" ...
Credici o meno, in realtà ho avuto abbastanza fortuna usando solo mod_porter. Mod_porter fa fare a Apache un po 'del lavoro che la tua app normalmente farebbe. Aiuta non legare una discussione e un mucchio di memoria durante il caricamento. Risulta in un file locale per la tua app, per una facile elaborazione. Se si presta attenzione al modo in cui si elaborano i file caricati (si pensi ai flussi), è possibile fare in modo che l'intero processo utilizzi pochissima memoria, anche per quelle che sarebbero tradizionalmente operazioni costose. Questo approccio richiede pochissime impostazioni effettive per la tua app per funzionare, e nessuna reale modifica al tuo codice, ma richiede un particolare ambiente (server Apache), oltre alla possibilità di configurarlo.
Ho anche avuto fortuna usando jQuery-File-Upload, che supporta roba buona come caricamenti chunked e ripristinabili. Senza qualcosa come mod_porter, questo può ancora legare un intero thread di esecuzione durante il caricamento, ma dovrebbe essere decente sulla memoria, se fatto bene. Ciò si traduce anche in un file che è "vicino" e, di conseguenza, facile da elaborare.Questo approccio richiederà modifiche al livello di visualizzazione da implementare e non funzionerà con tutti i browser.
Hai menzionato FTP e BitTorrent come opzioni possibili. Queste non sono così male di opzioni come si potrebbe pensare, in quanto è ancora possibile ottenere i file molto vicino al server. Non si escludono nemmeno a vicenda, il che è bello, perché (come hai sottolineato) richiedono un altro client che potrebbe essere o non essere presente sulla macchina che carica. Il modo in cui funziona è, in pratica, hai impostato un'area da cui scaricare per renderlo visibile alla tua app. Quindi, se è necessario eseguire qualsiasi elaborazione, si esegue un cron job (o qualsiasi altra cosa) per monitorare tale posizione per i caricamenti e attivare il metodo di elaborazione dei server. Questo non ti dà la risposta immediata che i metodi sopra possono fornire, ma puoi impostare che l'intervallo sia abbastanza piccolo da essere abbastanza vicino. L'unico vero vantaggio di questo metodo è che i protocolli utilizzati sono più adatti al trasferimento di file di grandi dimensioni, il requisito del cliente aggiuntivo e il processo frammentato di solito superano di gran lunga tutti i vantaggi, secondo la mia esperienza.
Se non hai bisogno di alcuna elaborazione, la soluzione migliore è semplicemente andare direttamente a S3 con loro. Questa soluzione cade nel secondo in cui devi effettivamente fare qualsiasi cosa con i file diversi da server come risorse statiche ....
Non ho alcuna esperienza con l'HTML5 FileSystemAPI in un'app per rails, quindi non posso parliamo a quel punto, anche se sembra che limiti significativamente i client che sei in grado di supportare.
Sfortunatamente, non esiste un vero proiettile d'argento: tutte queste opzioni devono essere valutate rispetto all'ambiente nel contesto di ciò che si sta tentando di realizzare. Ad esempio, potresti non essere in grado di configurare il tuo server web o scrivere in modo permanente sul tuo file system locale. Per quello che vale, penso che jQuery-File-Upload sia probabilmente la soluzione migliore nella maggior parte degli ambienti, in quanto richiede solo modifiche alla tua applicazione, quindi puoi spostare un'implementazione in un altro ambiente più facilmente.
@ eabharam..There è un po 'di problema di prestazioni quando si utilizzano amazon.have provato una volta – Catmandu