Uploading Files in Actions
Here is everything you need to know to configure action so that they can upload files.

General

In order to upload files through an action, either a public URL or a URL that is available in a Flow (e.g. the output of the CSV Helper) needs to be referenced to in a field with the key request_binary_url, which can be configured like this in the UI Form Schema Renderer:
{
"request_binary_url": {
"title": "File URL where the file is fetched from",
"type": "text",
"required": true,
"info": "The file can come from a previous step of a Locoia flow or from a static location on the web"
}
}
Only the key (request_binary_url) needs to be exactly as in the example, all other parameters can be set according to the action.
If that key is set and a valid URL is passed to it, the file will be converted to binary format and sent with the header value "Content-Type": "multipart/form-data".
The body consists of
  • name which is by default file,
  • filename which is based on the file name in the URL or if that cannot be retrieved file,
  • Content-Type which is based on the file itself, and
  • the file itself in binary format
and looks like this (without the file):
Content-Disposition: form-data; name="file"; filename="example-image.png".
Content-Type: image/png.
If the endpoints expects the file to be uploaded in that way, both the request body and header template need to be configured with {} only.

Body parameters

In addition to the automatically set body key-value pair, additional ones can be send as well (which is e.g. required by HubSpot), by adding the parameters to the body like regular parameters. These will then be send as form-data as well.

File meta data

The following file meta data can be used in the body or header by referencing to binary_file.
  • name
  • content
  • mime_type
For an example usage, see the Gmail action.

Additional parameters

form_item_name

Some APIs, such as this one require that the name in the body is set to something else than the default file, in that case image. This can be configured directly in the UI Form Schema, by specifying the parameter form_item_name with the name that should be sent, e.g.:
{
"request_binary_url": {
...,
"form_item_name": "image"
}
}

upload

This parameter can be set to false if the file should not actually be uploaded, but only be converted to binary format and then uploaded in another format. This is for example needed to send emails with attachments with Gmail, where the requests body needs to be built in the request body template and then base64 encoded:
{% set boundary = str(uuid(4)) %}
{% set raw = [
'Content-Type: multipart/mixed; boundary="' + boundary + '"\n',
'To: <' + to_email + '>\n',
...,
'--' + boundary + '\n',
'Content-Type: text/' + body_type + '; charset="UTF-8"\n\n',
body,
] %}
{% if binary_file != None %}
{% set raw = raw + [
'\n\n--' + boundary + '\n',
'Content-Type: ' + binary_file.mime_type + '; name="' + binary_file.name + '"\n',
'Content-Disposition: attachment; filename="' + binary_file.name + '"\n',
'Content-Transfer-Encoding: base64\n\n',
binary_file.content | base64_encode
] %}
{% endif %}
{% set raw = raw + ['\n\n--' + boundary + '--'] %}
{
"raw": "{{ raw | join | base64_encode("urlsafe") }}"
}
Copy link
On this page
General
Body parameters
File meta data
Additional parameters
form_item_name
upload