ruby-on-rails ruby base64 encode activesupport

ruby on rails - Cómo codificar medios en base64 URL dada en Ruby



ruby-on-rails encode (5)

Estoy intentando subir una imagen a PingFM. Su documentation dice:

media – base64 encoded media data.

Puedo acceder a esta imagen a través de la URL. Intenté (prácticamente adiviné) esto:

ActiveSupport::Base64.encode64(open("http://image.com/img.jpg"))

Pero me sale este error:

TypeError: can''t convert Tempfile into String from /usr/lib/ruby/1.8/base64.rb:97:in `pack'' from /usr/lib/ruby/1.8/base64.rb:97:in `encode64'' from (irb):19 from :0


Aquí está mi solución:

1: Ponga este método personalizado image_tag en ApplicationHelper, e incluya el módulo ActiveSupport

module ApplicationHelper include ActiveSupport def image_tag_base64(file_path, mime_type = ''image/jpeg'', options = {}) image_tag("data:#{mime_type};base64,#{Base64.encode64(open(file_path) { |io| io.read })}", options) end end

2: Luego, dentro de la vista que desea usar la imagen codificada en base64, use el método de esta manera:

<%= image_tag_base64 @model.paperclip_attribute.path(:size), @model.paperclip_attribute.content_type, {class: ''responsive-img etc etc''} %>

3: HECHO


Codifique un archivo a la codificación base64:

File.open("output_file","w"){|file| file.write [open("link_to_file").string].pack("m")}

Decodificar el archivo codificado base64:

File.open(''original'', ''wb'') {|file| file << (IO.readlines(''output_file'').to_s.unpack(''m'')).first }


El método open :

open("http://image.com/img.jpg")

está devolviendo un objeto Tempfile, mientras que encode64 espera una Cadena.

Llamar a read en el archivo temporal debería ser el truco:

ActiveSupport::Base64.encode64(open("http://image.com/img.jpg") { |io| io.read })


Esto también funcionará, es un poco más limpio

require ''base64'' Base64.encode64(open("file_path").to_a.join)

"¿Cómo descifras esto en un archivo?" - @ user94154

require ''base64'' open(''output_file_name.txt'', ''w'') do |f| f << Base64.decode64( encoded_content ) end

Donde encoded_content sería el valor de retorno del contenido del archivo previamente codificado.


Para codificar un archivo:

require ''base64'' Base64.encode64(File.open("file_path", "rb").read)

Para producir el archivo a partir de la cadena codificada:

require ''base64'' encoded_string = Base64.encode64(File.open("file_path", "rb").read) File.open(file_name_to_create, "wb") do |file| file.write(Base64.decode64(encoded_string)) end