2010-06-08 2 views
0

У меня есть двоичные файлы, которые нужно отправить в виде строки на сторонний веб-сервис. Оказывается, для этого требуется кодирование base64.Как я могу закодировать двоичный файл (JPG) в ruby ​​

В рубине Я использую следующий:

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

тела сильного, который conists кучи строк в качестве параметров.

Правильно ли это выглядит? (файл загружается в модель Postalcard с помощью paperclip)

Спасибо.

ответ

2

Base64.b64encode по умолчанию печатает версию кодированного базового 64 длиной 60 символов. Например, если я буду делать

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" 

Но если вы не хотите, чтобы распечатать закодированной строки на стандартный вывод и только возвращает его значение, который я думаю, что вам нужно, затем используйте

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

oh Я вижу, так, другими словами, .b64encode усекает его до 60? – Angela

+0

Нет, он не обрезает переданную строку. В дополнение к возврату закодированной строки он также распечатывает кодированную версию в строках по 60 символов по умолчанию, иначе он будет печатать символы, равные второму аргументу, как я указал в моем примере выше, т.е. 'Base64.b64encode ('StackOverflow' , 4) ' – nas

+0

хорошо, поэтому для моих целей я должен использовать base64.encode64? Я хочу передать закодированную строку как часть строки в веб-службу .... – Angela

Смежные вопросы