2010-12-20 45 views
1

嗨 我現在工作的需要上傳的視頻有很多項目,請問導軌具有這個助手可以解決這個問題,如YouTube視頻地址:rails helper給上傳文件一個唯一的名字?

www.youtube.com/watch ?v = KYUhtPV_Lk4

感謝

+0

您想上傳很多YouTube視頻網址嗎? – tadman 2010-12-20 18:36:07

+0

讓我來解釋一下,我的項目是下載youtube視頻並上傳到我的服務器,成爲youtube從我的國家被禁止 – mko 2010-12-22 07:05:49

回答

1

你使用ActiveRecord的文件建模或者是他們只是平面文件的地方?

,如果你有一個像UploadedFile的一個模型< <的ActiveRecord :: Base的每一個文件,你可以只使用模型的ID,或者如果你想有一個字符串,你可以加入鹽一些字符串散列它。

irb(main):021:0> file_id = 1 
=> 1 
irb(main):022:0> Digest::SHA1.hexdigest('SomeRandomString' + file_id.to_s) 
=> "70f5eedc8d4f02fd8f5d4e09ca8925c2f8d6b942" 

,如果你只是讓他們在系統上的平面文件,你可以散列它們的路徑+文件名來創建一個唯一的字符串。

irb(main):016:0> Digest::SHA1.hexdigest '/home/bob/somefile.mp4' 
=> "204a038eddff90637c529af7003e77d600428271" 

您可以隨時添加當前時間的時間戳和一個隨機數以防止愚蠢。

+0

謝謝,但是SHA1是唯一的選擇嗎?對於一個文件名,我認爲它需要更短 – mko 2010-12-21 09:35:46

+0

你實際上只需要sha1的一部分,但是越少它們就越有可能碰撞(兩個不同的文件給出相同的散列) – Kalendae 2010-12-21 20:12:49

3

您可以生成一個隨機字符串這樣的,並用它作爲文件名:

Digest::SHA1.hexdigest(Time.now.to_s) # => 800b262b59296b660a4f73e23580809143ed8846 
+0

謝謝Zabba,我可以嗎?使它更短? – mko 2010-12-21 09:36:03

+1

我想你可以使用類似的東西(它*應該*生成一個唯一的數字,但誰肯定知道:)'Time.now.strftime(「%Y%m%d%H%M%S」)+(蘭特* 1000000).round.to_s' =>'20101221022720522543' – Zabba 2010-12-21 10:27:22

+0

謝謝,時間戳是一個不錯的選擇。 – mko 2010-12-22 07:07:26

0

SecureRandom.uuid生成一個隨機v4的UUID(通用唯一標識符)

它不包含有意義的

信息,如MAC地址,時間等。 有關UUID的詳細信息,請參閱RFC 4122的 。

SecureRandom::uuid