2010-06-08 76 views
0

我有一個二進制文件需要作爲字符串發送到第三方Web服務。原來它需要它需要base64編碼。如何在紅寶石中編碼二進制文件(JPG)

在紅寶石我使用下面的:

 body = body << Base64.b64encode(IO.read("#{@postalcard.postalimage.path}")) 

體是強這一串字符串作爲參數的conists。

這種看法合適? (該文件使用回形針加載到模型Postalcard中)

謝謝。

回答

2

Base64.b64encode默認打印出60個字符長度的base 64編碼版本。例如,如果我會做

Base64.b64encode('StackOverflow') 
#=> prints U3RhY2tPdmVyZmxvdw== 
#=> returns "U3RhY2tPdmVyZmxvdw==\n" 

如果我給它的長度,可以說4

Base64.b64encode('StackOverflow', 4) 
#=> prints U3Rh 
#=> prints Y2tP 
#=> prints dmVy 
#=> prints Zmxv 
#=> prints dw== 
#=> returns "U3RhY2tPdmVyZmxvdw==\n" 

但是,如果你不希望打印出編碼字符串到stdout,只返回它的值,我認爲你需要什麼,然後使用

Base64::encode64('StackOverflow') 
#=> "U3RhY2tPdmVyZmxvdw==\n" 
+0

哦我看,換句話說,.b64encode將它截斷爲60? – Angela 2010-06-08 17:10:18

+0

不,它不會截斷傳遞的字符串。除了返回編碼的字符串,它還打印出60個字符的編碼版本,默認情況下,它將打印出與第二個參數相同的字符,就像我在上面的例子中給出的那樣,即'Base64.b64encode('StackOverflow' ,4)' – nas 2010-06-08 20:35:09

+0

好吧,爲了我的目的,我應該使用base64.encode64?我想將編碼字符串作爲字符串的一部分傳遞給Web服務.... – Angela 2010-06-11 04:22:25