我正在尝试使用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 ...>>
请帮助。
答案 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