Télécharger des fichiers avec multipart/form-data est simple et fonctionne bien la plupart du temps jusqu'à ce que vous ayez commencé à vous concentrer sur le téléchargement de gros fichiers. Si nous look closely ce qui se passe lors d'un téléchargement de fichier:Filepicker? Télécharger de gros fichiers via HTML5 vers S3 sans backend
client envoie une requête POST avec le contenu du fichier dans le corps
serveur Web accepte la demande et initie le transfert de données (ou renvoie une erreur 413 si la taille du fichier est dépasser la limite)
serveur web commence à remplir des tampons (dépend de la taille du fichier et des tampons), les stocker sur le disque et l'envoyer via la prise/réseau back-end
back-end vérifie l'authentification (jetez un oeil, une fois le fichier téléchargé)
back-end lit le fichier et réduit les quelques en-têtes Content-Disposition, Content-Type, stocke sur le disque à nouveau effectue des back-end tout ce que vous devez faire avec le fichier
pour éviter un tel surcoût nous fichier de vidage sur le disque (Nginx client_body_in_file_only) et de gérer le rappel à envoyer plus loin sur la ligne. Ensuite, l'agent de file d'attente sélectionne le fichier et fait ce qui est requis. Il fonctionne pour la communication inter-serveur assez lisse mais nous devons résoudre le problème similaire avec le téléchargement côté client.
Nous avons également une solution de téléchargement S3 côté client. Aucune interaction back-end ne se produit. Pour le téléchargement de vidéos, nous gérons la vidéo pour convertir au format h.264 Baseline/AAC avec Zencoder.
Actuellement, nous utilisons Flash uploader modifié basé sur s3-swf-upload-plugin avec la combinaison de Zencoder JS SDK qui est vraiment efficace, mais utilise Flash.
Question. Comment atteindre le même objectif avec l'uploader de fichiers HTML5? Est-ce que Filepicker.io and Zencoder résout le problème? Quelle est la méthode recommandée pour gérer le téléchargement de fichiers HTML5 sans interaction back-end?
Les exigences sont les suivantes:
- HTML5, pas flash
- télécharger la vidéo avec le post-traitement pour le rendre compatible avec les lecteurs HTML5 et mobiles
- pour télécharger des images post-traitement wtih (redimensionner, recadrer, faire pivoter)
- pour télécharger des documents tels que PDF avec une fonctionnalité de prévisualisation
Est-ce https://www.filepicker.com faire un bon travail?
Je dois rechercher un peu plus, mais 'client_body_in_file_only' ne causerait-il pas plus d'accès au disque et donc une baisse des performances? Les docs Nginx disent qu'il devrait être utilisé pour le débogage principalement. – aergistal
@aergistal non, cela fonctionne dans la production de nombreuses années pour nous, tout est parfait. J'ai parlé aux développeurs de l'équipe de base Nginx, ils ont confirmé que c'est assez stable pour la charge de travail de production. – Anatoly