2015-04-20 3 views
8

Я пытаюсь перенести изображения из локальной файловой системы в Dropbox, поэтому я использую Dropbox Dropbox для переноса всех изображений в Dropbox. Я могу хранить новые изображения, которые загружаются из моего приложения. Я пытаюсь переместить существующие изображения.Carrierwave - Сохраните нуль, если изображение не загружено

Я использую Article.first.avatar? метод, чтобы проверить, существует ли изображение или нет, я использовал этот метод во многих местах для разных размеров изображений в моем приложении.

Когда я использую вышеуказанный метод, чтобы узнать, существует ли изображение или нет, он всегда говорит true, когда изображение отсутствует в dropbox. Посмотрите на моем консольном выводе (2),

Моего загрузчик:

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 

консольного вывод (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={}> 

Я изменил загрузчик следующим образом: выход

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 

консоли (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. Почему оно отображается «истинно», когда изображение отсутствует.
  2. Как я могу получить «false», когда изображение отсутствует в Dropbox.
+0

Можете ли вы описать вопрос более конкретно? Как изображение не будет загружено? – RockStar

+0

@RockStar обновил мой вопрос. – Mano

ответ

0

Мой удар в темноте, что внутри Carrierwave, нормальный файл класс возвращает (продезинфицировать файл) реагирует на пустой, проверяя, существует ли файл:

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

Внутри carrierwave Dropbox драгоценного камня , класс File (https://github.com/robin850/carrierwave-dropbox/blob/master/lib/carrierwave/storage/dropbox.rb#L45) не реализует это. Я предполагаю, что если вы снова открыли класс и добавили

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 

Возможно, это сработает?

+0

Я добавил вышеописанный метод в драгоценный камень и протестировал его, вернув «false», но всегда возвращает «true». def empty? return false end – Mano

Смежные вопросы