Carrierwave dropbox检查文件是否存在

时间:2015-04-09 10:31:36

标签: ruby-on-rails-3 dropbox carrierwave

我正在尝试使用carrierwave-dropbox将所有图像从我的本地文件系统移动到dropbox。

我想检查图像是否存在。

我的控制台输出

>Article.first.image?
>true

但是Dropbox位置没有该文件,因为我的数据库中有以下条目,所以它显示为“true”。

#<ImageUploader: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/image.png",
 @uploader=#<ImageUploader: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=
    #<DropboxSession:0x007f8574143498
    @access_token=#<OAuthToken:0x007f8574143470 @key="123453333",     @secret="22222222222">,
     @consumer_key="abcdeafs",
     @consumer_secret="asdfasfj",
     @locale=nil,
     @request_token=nil>>,
     @uploader=#<ImageUploader:0x007f8574143ee8 ...>>

请帮助。

1 个答案:

答案 0 :(得分:0)

从阅读the source code开始,看起来这个库没有内置支持来测试文件的存在。

以下是可能的一些代码。 (我根本没有测试它,我从来没有使用过carrierwave-dropbox,而且我也不会精通Ruby。)

dropbox_file = Article.first.image
exists = false
begin
    dropbox_file.client.metadata(dropbox_file.path)
    exists = true
rescue DropboxError
end

编辑:如果您想更具体地处理错误处理,请执行以下操作:

rescue DropboxError => e
    if e.http_response.code == '404'
        # the file is not found
    else
        # some other error occurred
    end
end