2015-04-20 12 views
8

sto provando a migrare le immagini dal file system locale a dropbox, quindi sto usando carrierwave dropbox gem per spostare tutte le immagini su dropbox. Sono in grado di memorizzare nuove immagini che vengono caricate dalla mia applicazione. Sto cercando di spostare le immagini esistenti.Carrierwave - Salva nil se l'immagine non è stata caricata

sto usando Article.first.avatar? metodo per verificare se l'immagine esiste o no, ho usato questo metodo in molti posti per diverse dimensioni di immagini nella mia applicazione.

quando utilizzo il metodo sopra riportato per scoprire se l'immagine esiste o meno, si dice vero sempre quando l'immagine non è presente nella casella personale. Guardate la mia uscita della console (2),

mio uploader:

class Avatar < CarrierWave::Uploader::Base 
include CarrierWave::MiniMagick 
storage: file 
def store_dir 
    if model 
     "uploads/#{model.class.to_s.underscore}/#{model.id}/#{mounted_as}" 
    else 
     "uploads/#{mounted_as}/" 
    end 
end 
end 

uscita della console (1)

>Article.first.avatar? 
>false 
#<AvatarUploader:0x007f9813f1fe70 
@file= 
    #<CarrierWave::SanitizedFile:0x007f9813f1e688 
    @content_type=nil, 
    @file="/Users/work/project/app1/public/uploads/370/avatar/avatar.png", 
    @original_filename=nil>, 
@model= 
    ##Article model 
@mounted_as=:avatar, 
@storage=#<CarrierWave::Storage::File:0x007f9813f1fad8 @uploader=#<AvatarUploader:0x007f9813f1fe70 ...>>, 
@versions={}> 

ho cambiato uploader come segue: uscita

class Avatar < CarrierWave::Uploader::Base 
    include CarrierWave::MiniMagick 
    storage: dropbox 
    def store_dir 
     if model 
      "uploads/#{model.class.to_s.underscore}/#{model.id}/#{mounted_as}" 
     else 
      "uploads/#{mounted_as}/" 
     end 
    end 
    end 

console (2)

>Article.first.avatar? 
>true 
    #<AvatarUploader:0x007f8574143ee8 
@file= 
#<CarrierWave::Storage::Dropbox::File:0x007f8574143308 
    @client= 
    #<DropboxClient:0x007f8574143420 
    @root="dropbox", 
    @session= 
    #<DropboxSession:0x007f8574143498 
    @access_token=#<OAuthToken:0x007f8574143470 @key="123453333",  @secret="22222222222">, 
    @consumer_key="abcdeafs", 
    @consumer_secret="asdfasfj", 
    @locale=nil, 
    @request_token=nil>>, 
    @config= 
{:app_key=>"asdfasfasf", 
:app_secret=>"asdfkasfksf", 
:access_token=>"adfkjasfkhs", 
:access_token_secret=>"aksdfkhsfksf", 
:access_type=>"dropbox", 
:user_id=>"292929292"}, 
@path="uploads/images/370/avatar.png", 
@uploader=#<AvatarUploader:0x007f8574143ee8 ...>>, 
@model= 
    #Artcle Model>, 
    @mounted_as=:image, 
    @storage= 
    #<CarrierWave::Storage::Dropbox:0x007f8574143c90 
    @config= 
    {:app_key=>"asdfasfasf", 
    :app_secret=>"asdfkasfksf", 
    :access_token=>"adfkjasfkhs", 
    :access_token_secret=>"aksdfkhsfksf", 
    :access_type=>"dropbox", 
    :user_id=>"292929292"}, 
    @dropbox_client= 
    #<DropboxClient:0x007f8574143420 
    @root="dropbox", 
    @session= 
  1. perché mostra "true" quando l'immagine non è presente.
  2. come posso ottenere "false" quando l'immagine non è presente nella casella personale.
+0

Puoi descrivere una domanda più specifica? In che modo l'immagine non verrà caricata? – RockStar

+0

@RockStar ha aggiornato la mia domanda. – Mano

risposta

0

mio salto nel buio è che all'interno Carrierwave, la classe di file normale restituisce (file sterilizzata) risponde a svuotare verificando se il file esiste:

https://github.com/carrierwaveuploader/carrierwave/blob/master/lib/carrierwave/sanitized_file.rb#L144

All'interno della gemma carrierwave set , la classe File (https://github.com/robin850/carrierwave-dropbox/blob/master/lib/carrierwave/storage/dropbox.rb#L45) non la implementa. Sto cercando di indovinare se riaperto la classe e aggiunto

module CarrierWave 
    module Storage 
    class Dropbox < Abstract 
     class File 

     def empty? 
      # use dropbox API to get the file and check the presence here 
     end 
     end 
    end 
    end 
end 

Sarebbe probabilmente funzionerà?

+0

Ho aggiunto il metodo precedente in gem e testato restituendo "false", ma restituisce sempre "true". def vuoto? ritorno false fine – Mano