2

我有一个 Rails 应用程序,可以在其中上传一首歌曲,我正在尝试将该歌曲与资产目录中的所有其他歌曲进行比较。如果歌曲相同,我想删除上传并将所有查询路由到主歌曲。

我正在考虑建立一个关联,其中主歌曲有许多用户歌曲上传,但默认情况下,用户关联的主歌曲 ID 为 nil。我将如何检查资产中的歌曲是否相等,以及如何删除歌曲并将请求路由到主歌曲。

这是我的 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 数据库:

 t.has_attached_file :m_song
     :url => "/assets/master_songs/:id",
     :path =>  "#{rails.root}/assets/master_songs/:id",

有任何想法吗?太感谢了。

4

1 回答 1

1

文件级别比较:

制作文件的 md5/sha1 校验和并将它们保存在 db 中,下次上传时,上传完成时首先比较校验和,如果相同,只需链接它们。

这类似于 ZFS 文件系统重复数据删除。

于 2012-05-04T02:55:35.090 回答