我有一个rails应用程序,其中一个上传一首歌,我试图将该歌曲与资产目录中的所有其他歌曲进行比较。如果歌曲相同,我想删除上传并将所有查询路由到主歌曲。
我正在考虑建立一个主歌曲上传许多用户歌曲的关联,但默认情况下,用户关联的主歌曲ID为零。如何检查资源中的歌曲是否相等,以及如何删除歌曲并将请求路由到主歌曲。
这是我的user_song_uploads数据库:
class CreateUserSongUploads < ActiveRecord::Migration
def change
create_table :user_song_uploads do |t|
t.integer :user_id
t.has_attached_file :song
:url => "/assets/user_song_uploads/:id/",
:path => "#{rails.root}/assets/user_song_uploads/:id/",
t.timestamps
t.string :artist
t.string :album
t.string :title
end
end
end
我的master_song db:
t.has_attached_file :m_song
:url => "/assets/master_songs/:id",
:path => "#{rails.root}/assets/master_songs/:id",
有什么想法吗?非常感谢你。
答案 0 :(得分:1)
文件级别比较:
制作文件的md5 / sha1校验和并将其保留在db,当下次上传时,上传完成时首先比较校验和,如果相同则只链接它们。
这类似于ZFS文件系统重复数据删除。