2012-08-02 9 views
5

Obecnie używam Rails 3.2 z klejnotem Carrierwave do przesyłania plików do Amazon S3. Teraz muszę być w stanie obsłużyć przesłane przez użytkowników pliki większe niż 5 GB, a jednocześnie używać klejnotu Carrierwave. Czy są jakieś inne klejnoty lub gałęzie Carrierwave lub Fog, które poradzą sobie z przesyłaniem plików 5GB + do S3?Jak mogę przesłać pliki większe niż 5 GB do Amazon S3?

Edycja: Wolałbym nie przepisywać kompletnych rozwiązań do ładowania Railsów, więc takie linki nie pomogą: https://gist.github.com/908875.

+0

Zapoznaj się z s3_multipart gem http://blog.bitcast.io/post/43001057745/direct-multipart-uploads-to-s3-in-rails – Zach

Odpowiedz

6

Wymyśliłem, jak to zrobić i sprawić, by działało. We właściwym config/environment pliku dodaj następujące wysyłania plików w kawałki 100MB do Amazon S3:

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

Ponieważ gem mgła ma wieloczęściowych przesłane wybudowany w (dzięki Veraticus za wskazanie go out), odpowiednia konfiguracja atrybutów tylko muszą zostać przekazane mgle za pośrednictwem Carrierwave. Wysyłając do S3 otrzymałem częste błędy o numerach Connection reset by peer (Errno::ECONNRESET), więc niektóre części mogą wymagać ponownej analizy.

-2

Przed przesłaniem musisz podzielić plik na małe fragmenty.

Spójrz na następujące:

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

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

Tak czy inaczej, trzeba podzielić plik.

+0

Potrzebuję zrobić to automatycznie z serwera z kodem Ruby/Rails lub klejnoty, nie używając zewnętrznych programów. – lee

+1

-1 Spodziewacie się, że użytkownicy lee będą mogli pobrać narzędzie z linii poleceń, podzielić duży plik na kilka mniejszych plików, a następnie przesłać je osobno? Nie sądzę, że jest to odpowiedź na zadane pytanie (lub realistyczne rozwiązanie w dowolny sposób, niezależnie od tego). –

+0

@Ken i Lee, przepraszam, popełniłem błąd, przeskakując do końca. Teraz chcę zobaczyć odpowiedź na to pytanie. Badam to i nie mogę znaleźć sposobu na osiągnięcie tego. – Dayan

6

Chcesz użyć S3's multipart upload functionality. Pomocniczo, Fog może rzeczywiście obsługiwać wielostronicowe przesyłanie S3, jak widać in this pull request.

Niestety, Carrierwave nie ma wbudowanej funkcjonalności, aby używać go poprawnie. Więc musisz zmodyfikować Carrierwave lub upuścić w mgle ręcznie, aby poprawnie przesłać ten plik.

+1

Dzięki, nie zauważyłem, że funkcja Fog jest udokumentowana w dowolnym miejscu. Spróbuję zmodyfikować Carrierwave, ponieważ wszystkie moje interakcje z S3 odbywają się za pośrednictwem tego Klejnotu. – lee

Powiązane problemy