2011-07-18 9 views
5

Tworzę aplikację rails, która pozwala administratorowi przesłać zdjęcia, które są opcjonalnie publicznie wyświetlane. Do procesu przesyłania/przechowywania używam klejnotu Carrierwave wraz z klejnotem Fog i S3. Problem polega na tym, że aby wszystko działało, muszę udostępnić każdy plik przesłany do wiadra s3 publicznie. Czy istnieje sposób, aby pliki były publiczne/prywatne dla pojedynczych plików? Ponadto, jeśli możliwa jest ziarnistość pliku po pliku, czy może ona rozciągać się do wersji obrazów (utworzonych przez automatyczne zmiany rozmiaru Carrierwave)?Szczegółowe ustawienia "publiczne" dla przesłanych plików przy użyciu Fog i Carrierwave

Obecnie mam następujący wiersz w moim carrierwave inicjatora:

config.fog_public = true 
+1

Prawdopodobnie jest to długi - brakująca funkcja w większości programów przesyłających Rails. Proponuję pójść z DragonFly, ponieważ pozwala to na niespotykany dotąd poziom personalizacji i jest w stanie to osiągnąć: – kain

+0

Po szybkim przyjrzeniu się DragonFly wydaje się, że obsługuje to, co próbuję. do wykonania, i wydaje się być znacznie bardziej elastyczny niż CarrierWave również. Dzięki. – dcb

Odpowiedz

7

Właściwie, to martwy prosty w Carrierwave.

Można to zrobić:

class PrivateUploader < StandardUploader 

    @fog_public = false 

lub (niesprawdzone ale powinno działać idealnie) to:

class PrivateUploader < StandardUploader 


    def fog_public 
    if local_condition 
     true 
    else 
     false 
    end 
    end 

:-)

nie próbowałem ważki, ale teraz, kilka problemów zostało naprawionych w ciągu ostatnich 2 miesięcy z Carrierwave, jest znacznie lepszy od wszystkiego, co widziałem. Szalenie elastyczne.

// mat

+0

Miałem wcześniejszą konfigurację po: wywołanie zwrotne sklepu, aby to osiągnąć, ustawienie mojej oryginalnej wersji na prywatną resztę dla pu Blic. Ten kod bardzo pomógł mi uprościć moją pracę. W szczególności, aby wszystkie wersje publicznego przekazu, z wyjątkiem oryginału, używam '! Self.version_name.nil?' Jako mojego 'local_condition' w powyższym kodzie. –

+0

@dcb powinien oznaczyć to jako zaakceptowaną odpowiedź –

5

prostu trzeba dokonać klasa uploader zastąpić klasę bazową. I oderwał moje włosy się dzisiaj zbyt .. :(To pracował dla mnie:

Korzystanie Carrierwave 0.8.0 (w maju 2013) /app/uploaders/whatever_uploader.rb

class WhateverUploader < CarrierWave::Uploader::Base 
    def fog_public 
    true # or false 
    end 
end 
+1

bingo bango bongo – diclophis

Powiązane problemy