How to encode media in base64 given URL in Ruby

Viewed 61799

I'm trying to upload an image to PingFM. Their documentation says:

media – base64 encoded media data.

I can access this image via the URL. I tried (practically guessed) this:

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

But I get this 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
6 Answers

This will work too, it's a little cleaner

 require 'base64'

 Base64.encode64(open("file_path").to_a.join)

"How do you decode this back into a file?" - @user94154

 require 'base64'

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

Where encoded_content would be the previously encoded file content return value.

In case it's useful to others, here's how to save a screenshot as base64 using Watir

browser = Watir::Browser.new(:chrome, {:chromeOptions => {:args => ['--headless', '--window-size=1000x1000']}})
browser.goto("http://www.yourimage.com")
browser.screenshot.base64

The beauty of this is you don't need to store the image itself

Related