1 votes

Comment puis-je faire un téléchargement de gros fichiers en utilisant Sinatra, haml, nginx et passenger ?

Je dois pouvoir autoriser un utilisateur à télécharger des fichiers de 30 à 60 mb à la fois. Pour l'instant, je résous le problème avec un simple formulaire :

%form{:action=>"/Upload",:method=>"post",:enctype=>"multipart/form-data"}
 - @theModelHash.each do |key,value|
   %br
   %input{:type=>"checkbox", :name=>"#{key}", :value=>1, :checked=>value}
   =key
 %br    
%input{:type=>"file",:name=>"file"}
%input{:type=>"submit",:value=>"Upload"}

Ce formulaire permet à l'utilisateur de sélectionner les options de traitement contenues dans leModelHash et de télécharger un fichier à traiter. Le problème est que cette méthode gèle l'interface utilisateur et exige que le formulaire entier soit réaffiché lorsque l'utilisateur appuie sur le bouton "retour".

J'ai regardé SWFUpload mais je ne sais pas comment l'intégrer dans mon application relativement simple. Il y a une page ici J'ai envisagé de l'intégrer à Rails, mais j'utilise Sinatra et je suis suffisamment novice en matière de programmation web pour ne pas savoir comment modifier ces fichiers pour les adapter à mes besoins.

Existe-t-il un moyen d'ajouter des téléchargements de fichiers volumineux à mon formulaire ? Quelque chose de relativement simple qui ajoute simplement une barre de progression et ne renvoie pas de fichier ? J'ai l'impression que je dois tripler la taille de mon application juste pour que cette fonction soit agréable à utiliser, et cela me dérange un peu.

2voto

asymmetric Points 140

Le processus est généralement le suivant : (extrait de four.livejournal.com/730831.html)

Les barres de progression des téléchargements HTTP sont plutôt obscures - elles impliquent généralement un processus exécuté sur le serveur qui garde la trace de la taille du fichier temporaire dans lequel le serveur HTTP écrit, puis, côté client, un appel AJAX est effectué toutes les deux secondes au serveur pendant le téléchargement pour demander la progression du téléchargement.

Pour ce faire, vous devez installer un module sur votre serveur web (qu'il s'agisse d'apache(1), de nginx(2) ou de lighttpd(3)). Cela signifie que vous ne pouvez pas exécuter votre application Sinatra en tant qu'application autonome ( ruby sinatraapp.rb ), mais que vous devez l'exécuter à travers(4) l'un des serveurs web susmentionnés. Le moyen le plus simple est d'utiliser Passenger(5).

Pour le polling AJAX côté client, essayez Ajax Upload(6).

HTH !

liens

  • (1) : piotrsarnacki.com/2008/06/18/upload-progress-bar-with-mod_passenger-and-apache/
  • (2) : wiki.nginx.org/NginxHttpUploadProgressModule
  • (3) : redmine.lighttpd.net/wiki/1/Docs:ModUploadProgress
  • (4) : blog.zerosum.org/2008/7/4/passager-3-sinatra
  • (5) : modrails.com/
  • (6) : valums.com/ajax-upload/

-1voto

Ahmed Said Points 3277

Vous pouvez obtenir des progrès de téléchargement avec : http://github.com/drogus/apache-upload-progress-module

Je n'ai pas utilisé de module autonome en tant que tel pour le téléchargement de fichiers.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X