2009-10-27 91 views
2

我想不重复的图像,如果它是被贴一样,回形针 - 图像重复

像:

USER1张贴图片
user2的发布同一图像

分贝中的2#图像

有没有办法处理?

谢谢,

+0

只是为了确保,但是您确定要这么做吗?文件如何被删除?两个用户链接到同一个文件有意义吗? – JRL 2009-10-27 21:50:51

+0

我以用户为例,但在我的情况是这是有道理的,但你是正确的这是一个不好的例子,只是有点懒惰解释一切^^ – Mike 2009-10-27 21:53:09

回答

0

要做到这一点,您需要将您的附件分解成自己的模型。

那么,你可能现在有

class User < ActiveRecord::Base 
    has_attached_file :avatar #plus a bunch of specifications here 
end 

你会建立一个新的模型和协会,如

class User < ActiveRecord::Base 
    belongs_to :images 
end 

class Image < ActiveRecord::Base 
    has_many :users 
    has_attached_file :avatar 
end 

然后在你的控制器,你需要做的

Image.find_or_create_by_avatar_file_name(#filename here) 

所以现在你有一个user.image_id属性,并可以有一个上传的图像与多个用户相关联。但是,我已经构建了一些用户照片上传(徽章照片,头像照片,有趣照片等)的相当大的系统,用户之间的实际重叠往往很小。此外,您真的只需要节省资源中最便宜的资源:存储空间。通过走这条路线,您不会节省任何带宽成本,处理或程序复杂性。

除非这是一个非常独特的环境(在这种情况下,听到你在做什么会很整洁),否则我会建议不要去这条路线。

+0

是的,我可以有一个上传的图像与多个用户关联,但...怎么可以我将新上传的图片与另一张图片进行比较? – Mike 2009-10-27 21:50:46

+0

我在我的答案中添加了一些控制器代码。你需要整理上传的文件名,并且可以对大小进行比较。 – 2009-10-27 22:02:50

+0

谢谢,您的完整回复,您绝对正确 - >即使有成千上万的副本,它的存储价格也很便宜... – Mike 2009-10-27 22:30:09

0

计算每个图像在保存时的散列值。当新用户帖子相同的图像,检查图像的哈希值,看看它是否在

+0

是的,这是我的想法,但我只是害怕做一个图像上的哈希每个时间之前保存一个会有点缓慢(但没有尝试) – Mike 2009-10-27 21:48:06

1

http://www.codeproject.com/Messages/2913691/Comparing-one-image-to-many-others-speeded-up.aspx

我用它在我的程序和所有罚款数据库匹配任何东西!

DB相关建议:在表中存储散列值。然后你只需要一个散列计算。

关于速度

1)约束图像尺寸100×100例如

2)当用户尝试登录时,他的密码哈希计算。我认为用户会更频繁地登录,然后更新他们的头像。

+0

这是有道理的,我会尝试今天晚上, 谢谢 – Mike 2009-10-27 22:01:02