2012-10-28 2 views
5

Sto usando portante wave, rail e amazon s3. Ogni volta che salva un'immagine, l'immagine si presenta in s3 e posso vederlo nella console di gestione con il nome in questo modo:amazon s3 e carrierwave nome immagine casuale nel bucket non corrisponde nel database

https://s3.amazonaws.com/bucket-name/ uploads/images/10/888fdcfdd6f0eeea_1351389576.png

Ma nel modello, il nome è questo:

https://bucket-name.s3.amazonaws.com/ uploads/images/10/b3ca26c2baa3b857_1351389576.png

Prima di tutto, perché il nome casuale è diverso? Sto generando nel uploader in questo modo:

def filename 
    if original_filename 
    "#{SecureRandom::hex(8)}_#{Time.now.to_i}#{File.extname(original_filename).downcase}" 
    end 
end 

So che non sta generando una stringa casuale ogni chiamata perché l'URL sbagliato nel modello è coerente e salvato. Da qualche parte nel processo ne deve essere generato uno nuovo per salvare nel modello dopo che il nome dell'immagine è stato salvato e inviato a Amazon s3. Strano.

Inoltre, posso avere l'url corrisponde a quello in termini di s3/bucket anziché bucket.s3 senza utilizzare un'espressione regolare? C'è un'opzione in carrierwave o qualcosa del genere?

risposta

2

Ho risolto il problema salvando il nome file se era ancora il nome file originale. Nel uploader, messo:

def filename 
    if original_filename && original_filename == @filename 
    @filename = "#{any_string}#{File.extname(original_filename).downcase}" 
    else 
    @filename 
    end 
end 

La questione della sumbdomain contro il percorso non è in realtà un problema. Funziona con il sottodominio. Cioè https://s3.amazonaws.com/bucket-name/ e https://bucket-name.s3.amazonaws.com/ funzionano entrambi.

3

CarrierWave per impostazione predefinita non memorizza l'URL. Invece, lo genera ogni volta che ne hai bisogno.

Quindi, ogni volta che viene chiamato filename, verrà restituito un valore diverso, a causa di Time.now.to_i.

Utilizzare invece la colonna created_at oppure aggiungere una nuova colonna per la memorizzazione dell'ID casuale o del nome file completo.

+0

Apprezzo la mancia che non è stata salvata. Avevo solo bisogno di salvarlo – AJcodez