2010-08-07 221 views
2

我需要生成邊界爲多部分上傳生成隨機字符串,不SecureRandom的

post << "--#{BOUNDARY}\r\n" 
    post << "Content-Disposition: form-data; name=\"datafile\"; filename=\"#{filename}\"\r\n" 
    post << "Content-Type: text/plain\r\n" 
    post << "\r\n" 
    post << file 
    post << "\r\n--#{BOUNDARY}--\r\n" 

邊界需要是一個隨機字符串(沒有出現在文件中)。

在Rails,我可以做SecureRandom.hex(10)

誰,我可以做到這一點,無負載的ActiveSupport?

+0

爲什麼它需要是隨機的? – sepp2k 2010-08-07 17:07:16

+0

我無法使用預先生成的邊界字符串,因爲如果我上傳的文件包含字符串,我需要生成一個新字符串。 – 2010-08-07 17:13:52

回答

5

如果你需要一個隨機的字母數字字符串,使用類似:

rand(10000000000000).floor.to_s(36) 

這將使隨機數(改變乘數使字符串更長)並以36爲基數(10個數字+26個字母)表示。

對於Base64編碼字符串,你可以不喜歡

require 'base64' 
Base64.encode64(rand(10000000000000).to_s).chomp("=\n") 

如果你需要一個固定長度的字符串,用你提供的隨機數範圍內發揮,使用類似百萬+蘭特(10000000) 。

+2

蘭特(10 ** 30).to_s(36)做了詭計! – 2010-08-07 17:14:26

0

我最後一次使用MD5對蘭德這樣的:

require 'md5' 
random_string = MD5.md5(rand(1234567).to_s).to_s 
0

如果你想隨機的字母數字字符串,那麼,你可以像下面

o = [('a'..'z'),('A'..'Z'),('0'..'9')].map{|i| i.to_a}.flatten 
string = (0...50).map{ o[rand(o.length)] }.join 

這也將產生一個字母數字隨機字符串

rand(36**length).to_s(36) 

您也可以通過「長度」生成隨機字符串的大小。 Ex.8 or 10