Carica file con multipart/form-data è semplice e funziona bene la maggior parte del tempo finché non inizi a concentrarti sul caricamento di file di grandi dimensioni. Se look closely cosa succede durante un caricamento di file:Filepicker? Carica file di grandi dimensioni tramite HTML5 su S3 senza alcun backend
client invia richiesta POST con il contenuto del file nel corpo
web server accetta la richiesta e avvia il trasferimento di dati (o restituisce l'errore 413 se la dimensione del file è superare il limite)
server web inizia a popolare buffer (dipende del file e buffer size), immagazzinarli sul disco e inviarlo via presa/rete al back-end
back-end verifica l'autenticazione (date un'occhiata, una volta che il file viene caricato)
back-end legge il file e tagli alcuni header Content-Disposition, Content-Type, lo memorizza sul disco nuovo Esegue back-end tutto quello che devi fare con il file
per evitare tale sovraccarico noi scarichiamo file su disco (Nginx client_body_in_file_only) e gestire la richiamata da trasmettere a valle della linea. Quindi il gestore della coda preleva il file e fa quanto richiesto. Funziona per la comunicazione inter-server piuttosto slick, ma dobbiamo risolvere problemi simili con il caricamento lato client.
Abbiamo anche una soluzione di upload S3 lato client. Non si verifica alcuna interazione di back-end. Per il caricamento di video gestiamo il video per convertire nel formato h.264 Baseline/AAC con Zencoder.
Attualmente utilizziamo l'uploader Flash modificato basato su s3-swf-upload-plugin con la combinazione di Zencoder JS SDK che è davvero efficiente ma utilizza Flash.
Domanda. Come raggiungere lo stesso obiettivo con l'uploader di file HTML5? Filepicker.io and Zencoder risolve il problema? Qual è il modo consigliato di gestire il caricamento di file HTML5 senza interazione di back-end?
I requisiti sono i seguenti:
- HTML5, non lampeggiano
- di caricare video con il post-processing per renderlo compatibile con i lettori HTML5 e mobile
- per caricare le immagini addebbitato post-processing (ridimensionare, ritagliare, ruotare)
- per caricare documenti come PDF con una funzionalità di anteprima
fa https://www.filepicker.com fare un buon lavoro?
Devo ricercare ancora un po ', ma non "client_body_in_file_only' causa più accesso al disco e quindi prestazioni ridotte? I documenti Nginx dicono che dovrebbe essere usato principalmente per il debug. – aergistal
@aergistal no, funziona in produzione da molti anni per noi, tutto è perfetto. Ho parlato con gli sviluppatori del core team di Nginx, hanno confermato che è abbastanza stabile per il carico di lavoro di produzione. – Anatoly