Como posso fazer um upload de arquivo grande usando Sinatra, haml, nginx e passageiro?

1

Eu preciso permitir que um usuário envie arquivos de 30 a 60 MB por vez. No momento, estou resolvendo o problema com um simples post de formulário:

%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"}

Este formulário permite ao usuário selecionar opções de processamento contidas no ModelHash e fazer o upload de um arquivo para processamento. O problema é que esse método congela a interface do usuário e também exige que o formulário inteiro seja repostado quando o usuário pressionar o botão "voltar".

Eu olhei para SWFUpload , mas não tenho ideia de como integrar isso em meu aplicativo relativamente simples. Há uma página aqui sobre como integrá-lo ao Rails, mas estou usando o Sinatra, e sou novo o suficiente para toda essa programação da web que não sei como modificar esses arquivos para trabalhar com o que eu preciso fazer.

Há algum procedimento para adicionar uploads de arquivos grandes ao meu formulário? Algo relativamente simples que apenas adiciona em uma barra de progresso e não repete? Eu sinto que estou tendo que triplicar o tamanho do meu aplicativo apenas para fazer esse recurso ser legal, e isso está me incomodando um pouco.

    
por mmr 10.02.2010 / 23:01

2 respostas

2

O processo geralmente é o seguinte: (de four.livejournal.com/730831.html)

HTTP upload progress bars are rather obfuscated- they typically involve a process running on the server keeping track of the size of the tempfile that the HTTP server is writing to, then on the client side an AJAX call is made every couple seconds to the server during the upload to ask for the progress of the upload.

Para fazer isso, você precisa instalar um módulo no seu servidor web (seja apache (1), nginx (2) ou lighttpd (3)). O que significa que você não pode rodar seu aplicativo Sinatra como um standalone ( ruby sinatraapp.rb ), mas que você tem que executá-lo através de (4) um dos servidores web acima mencionados. A maneira mais fácil é usar o Passenger (5).

Para o polling AJAX do lado do cliente, experimente o Ajax Upload (6).

HTH!

links

  • (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/passenger-3-sinatra
  • (5): modrails.com /
  • (6): valums.com/ajax-upload /
por 27.06.2010 / 12:24
-1

você pode obter o progresso do upload com: link

Eu não usei nenhum módulo autônomo para o upload de arquivos.

    
por 21.05.2010 / 09:41

Tags