Img source: java67.com

I recently had to upload an image to an API endpoint in Rails, and did not found that much material online, so I decided to write this article describing how I managed to do this.

I was building an API that had to interact with an authentication micro service, where the request parameter was a Multipart image of a user file that should then be encoded in base 64 and get uploaded to AWS.

Basically, what I did was very simple:


file = request[:image]
json["data"] = Base64.encode64(File.read(file.path))

Let’s describe each part.

First we need to get the parameter in our controller:


file = request[:image]

Then we need to read our file from the file path:


File.read(file.path)

Finally, we need to encode our content in base 64:


json[:data] = Base64.base64(File.read(file.path))

This is all we need to do.

I am also sending other parameters, such as filename and content_type:

Here is the whole method whose result is then added as a request parameter and sent to the other API:


def prepare_json_image(file)
json = {}
json["filename"] = file.original_filename
json["content_type"] = file.content_type
json["data"] = Base64.encode64(File.read(file.path))
json
end

As you can see, it is very simple and easy to be implemented with so many great pre-existing functionalities that are available in Ruby on Rails.