如何知道图片是否已上传?- Paperclip

8

你知道是否有一种方法可以知道图像是否已经上传?

我的意思是,我有一个Foo_Class类,这个类可以有一个附加的图像,但它的存在并不一定是必要的。有没有办法知道该类的特定实例是否有图像?

谢谢!

5个回答

11
如果 foo.image? 返回 true,则文件已上传。

7
现在是 foo.image.exists? - Nilloc
1
如果你设置了 :default_url => 'missing.png',那么 foo.image.exists? 是否会被视为存在? - bershika
答案是:不,它会返回false。 - bershika
这种技术会访问服务器并检查文件是否存在。被投票赞成的技术会检查它是否已被处理并生成了URL。被赞成的解决方案可以节省查找时间(可能在S3上),但它不会检查文件是否实际存在于图像服务器上(您可能需要或不需要检查)。 - tomf

8
当您将Paperclip添加到模型时,您添加了特定于paperclip的行,我的是:
cover_file_name
cover_content_type
cover_file_size
cover_updated_at

然后我检查它是否为空

 Foo_Class.cover_file_name.nil? 

6
我认为,正确的解决方案是使用file?方法。 foo.image.file? 使用exists?会向服务器发送请求以检查文件是否存在,这可能非常慢,特别是如果它在不同的服务器或S3上。
使用foo.image_file_name.nil?可能与file?在内部相同,但您不希望依赖于Paperclip的实现,因为这可能会在未来改变。 http://rdoc.info/github/thoughtbot/paperclip/Paperclip/Attachment#file%3F-instance_method

1
如果这个在我的模型中。
has_attached_file :avatar, :styles => {:logo => "230x50>", :card_image => "180x50>"}

您可以检查用户(即@user)是否上传了图片

<%= @user.avatar.exists? %>

这将返回布尔值。


如果您的文件在S3上,这将触发对S3的请求。 - stephen.hanson

0
假设你想检查Foo模型中第一行是否存在附件(图片):
image_present = Foo.first.image?

如果附件存在,则返回 true。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接