2017-01-04 34 views
9

obecnie z Carrierwave, po wgraniu pliku jak foo.png podczas tworzenia różnych wersji tak:Carrierwave: Przenieś nazwy wersji na końcu nazwy pliku, zamiast z przodu

class ImageUploader < CarrierWave::Uploader::Base 
    include CarrierWave::MiniMagick 
    storage :fog 
    def store_dir 
    "#{model.class.to_s.underscore}/#{model.id}" 
    end 

    version :thumb do 
    process :resize_to_fit => [500, 500] 
    end 
end 

że wyniki w przesyłanych plików jako :

thumb_foo.png 
foo.png 

Chcę przenieść kciuk na koniec nazwy pliku z powodów SEO. Na podstawie ich docs tutaj dodałem:

def full_filename(for_file) 
    if parent_name = super(for_file) 
     extension = File.extname(parent_name) 
     base_name = parent_name.chomp(extension) 
     [base_name, version_name].compact.join("_") + extension 
    end 
    end 

    def full_original_filename 
    parent_name = super 
    extension = File.extname(parent_name) 
    base_name = parent_name.chomp(extension) 
    [base_name, version_name].compact.join("_") + extension 
    end 

Docs powiedzieć to powinno skutkować:

foo_thumb.png 
foo.png 

jednak skończę rzeczywiście coraz następujący:

thumb_foo_thumb.png 
foo.png 

jakiś pomysł co Robię źle?

Dzięki

+0

Czy próbowałeś [dostosować nazwy wersji pliku] (https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Customize-your-version-file-names)? Jest to także wersja ruchu do końca nazwy pliku – Thanh

Odpowiedz

2

Wystarczy użyć #full_filename pod blokiem version:

class AvatarUploaer < CarrierWave::Uploader::Base 
    include CarrierWave::MiniMagick 

    storage :file 

    version :thumb do 
    process resize_to_fill: [50, 50] 

    def full_filename(for_file = model.logo.file) 
     parts  = for_file.split('.') 
     extension = parts[-1] 
     name  = parts[0...-1].join('.') 
     "#{name}_#{version_name}.#{extension}" 
    end 
    end 
end 

Wynik będzie następujący:

/Users/user/app/uploads/1x1.gif 
/Users/user/app/uploads/1x1_thumb.gif 
+0

Doceniam wpis, który właśnie wypróbowałem i nie działa zgodnie z oczekiwaniami, nazwy plików pozostają niezmienione, byłem pewien, że zrestartowałem szyny itp. content_ i thumb_ są wciąż dodawane na początku nazwy pliku ... Używam Using nosidła 1.0.0 - pomysły? – AnApprentice

+0

Ponadto, moja pamięć jest ustawiona na 'storage: fog' – AnApprentice

+0

Mój błąd, szukałem na niewłaściwym przesyłającym doceniam całą twoją pomoc! – AnApprentice

-1

W obecnej wersji CarrierWave jeśli przesyłający zdefiniowane tak:

class LogoUploader < CarrierWave::Uploader::Base 
    # ... 
    def filename 
    "original_#{model.logo.file.extension}" if original_filename 
    end 
    version :small do 
    process :resize_to_fit => [190, 190] 
    process :convert => 'png' 
    end 
    version :icon do 
    process :resize_to_fill => [50, 50] 
    process :convert => 'png' 
    end 
    # ... 
end 

i dołączyć nazwę pliku somefile.jpg, będziesz skończyć z plików o nazwie original.jpg odpowiednio: original_small.png i original_icon.png.

+0

Nie sądzę, że to odpowiada na pytanie, chyba że czegoś brakuje ... – AnApprentice

+0

To zostało napisane na oficjalnej stronie fali nośnej, a co chcesz to nazwa pliku , ten kod zrobi to samo. Czy nie jesteś teraz w stanie rozwiązać problemu? –

+0

Chcę, aby wersja "thumb" nie znajdowała się w domyślnej lokalizacji frontowej thumb_foo.png, ale na końcu: foo_thumb.png – AnApprentice

0

Jeśli masz wiele wersji, zaakceptowana odpowiedź może stać się nieco żmudna.

Skończyłem zastępując pełny_plik nazwy dla wszystkiego zamiast w każdej indywidualnej definicji wersji. To działa dobrze. To jest dla Carrierwave 1,0

photo_uploader.rb

# Override the filename of the uploaded files: 
def full_filename(name) 
    "#{File.basename(name, '.*')}_#{version_name || 'original'}#{File.extname(name)}" 
end 

używam wbudowanego w File.basename i File.extname metod zamiast robić to ręcznie, jak widać w przyjętym odpowiedzi (chociaż właśnie tam zaczęło się i ten kod też działa dobrze).

Uwaga: Chciałem dodać "oryginalny" do niewersjonowanego przesyłania, aby moja lista katalogów wyglądała czystiej. Ta część mogła zostać usunięta dość łatwo.

foo_mobile.jpg

foo_original.jpg

foo_square.jpg