Upload Binary Files: Images, Attachments, Etc

Jets supports the ability to upload files like images via Binary Support. Binary support is enabled for multipart/form-data data. Jets converts the uploaded data from a standard HTML file input field and passes it to your controller as a file object through the params helper.


Here’s an example form with an HTML file input field:

<%= form_tag(action, multipart: true) do %>
  <div class="field">
    <%= label_tag :photo %>
    <%= file_field_tag "post[photo]" %>

NOTE: It is important to have multipart: true and also remove any <input type="hidden" name="_method" value="put" /> from the form to ensure the data gets passed from the form correctly to API Gateway.

When the user submits the form, the controller will receive a params containing the file upload as an File like object. Here’s an example params payload:


You can use params[:post][:photo] in the controller to read the file and save it to where you need, say s3.

This blog tutorial provides an example of image uploading with Jets and Carrierwave: Image Upload Carrierwave Tutorial.