2010-08-07 223 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