2012-08-02 22 views
5

Actualmente estoy usando Rails 3.2 con la gema Carrierwave para subir archivos a Amazon S3. Ahora debo ser capaz de manejar archivos enviados por el usuario de más de 5 GB, mientras sigo usando la gema Carrierwave. ¿Hay otras gemas o ramas de Carrierwave o Fog que puedan manejar las cargas de archivos de 5GB + a S3?¿Cómo puedo subir archivos de más de 5 GB a Amazon S3?

Editar: Preferiría no tener que volver a escribir una solución completa de carga de Rails, por lo que los enlaces como este no ayudarán: https://gist.github.com/908875.

+0

Echa un vistazo a la gema s3_multipart http://blog.bitcast.io/post/43001057745/direct-multipart-uploads-to-s3-in-rails – Zach

Respuesta

6

Descubrí cómo hacer esto y lo estoy trabajando ahora. En el archivo adecuado config/environment, añada la siguiente para enviar archivos en trozos de 100 MB a Amazon S3:

CarrierWave.configure do |config| 
    config.fog_attributes = { :multipart_chunk_size => 104857600 } 
end 

Desde la gema niebla tiene archivos de varias partes construidas en (gracias a Veraticus por señalarlo), la configuración apropiada atributos solo debe pasar a la niebla a través de Carrierwave. Al enviar a S3 recibí errores frecuentes de Connection reset by peer (Errno::ECONNRESET), por lo que es posible que haya que volver a intentar partes de la carga.

-2

Deberá dividir el archivo en pequeños fragmentos antes de cargarlo.

Tome un vistazo a la siguiente:

http://www.ruby-forum.com/topic/1282369

http://joemiller.me/2011/02/18/client-support-for-amazon-s3-multipart-uploads-files-5gb/

De cualquier manera, es necesario dividir el archivo.

+0

Necesito hacer esto automáticamente desde el servidor con el código Ruby/Rails o gemas, sin usar programas externos. – lee

+1

-1 Entonces, ¿espera que los usuarios de Lee descarguen una herramienta de línea de comando, dividan el archivo grande en varios más pequeños y luego cárguelos por separado? No creo que sea una respuesta a la pregunta (o una solución viable de ninguna manera). –

+0

@Ken & Lee, perdón chicos, cometí un error al llegar a una conclusión. Ahora estoy ansioso por ver la respuesta a esta pregunta. Lo estoy investigando y no puedo encontrar ninguna forma de lograr esto. – Dayan

6

Quiere usar S3's multipart upload functionality. De manera útil, Fog puede manejar cargas multipartitas S3, como puede ver in this pull request.

Desafortunadamente, Carrierwave no parece tener la funcionalidad incorporada para usarlo correctamente. Por lo tanto, necesitaría modificar Carrierwave o caer en Niebla manualmente para cargar correctamente este archivo.

+1

Gracias, no había visto esa funcionalidad de niebla documentada en ninguna parte. Intentaré modificar Carrierwave ya que todas mis interacciones con S3 se realizan a través de esa Gema. – lee

Cuestiones relacionadas