2009-10-27 90 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