Upload a binary image file to AWS S3 in Realm function

I’m trying to implement an app similar to the O’FISH app. My images are temporarily stored as binary data in MongoDB before being sent to S3 via a Realm trigger function.

I’ve written a realm function that uploads a file to my S3 bucket. This function works fine if the file is "hello world". However, I get Error: Unsupported body payload object when my file is a binary image queried from a MongoDB document.

Here is my Realm function:

exports = function(){
  var drawings = context.services.get("Cluster0").db("databaseName").collection("drawings");

  // get drawing document
  const query = { "_id": BSON.ObjectId("61c348229f2368fd6f2a2f95")};
  const projection = {
    "thumbnail" : 1,
  drawings.findOne(query, projection)
  .then(doc => {
    const imageName = doc._id.toString()
    // const file = 'hello world'
    const file = doc.thumbnail
    console.log('file type', Object.prototype.toString.call(file)) // this logs: [object Binary]
    // call uploadImageToS3 function
    context.functions.execute("uploadImageToS3", imageName, file)
    .then (() => {
      console.log('Uploaded to S3');

And here is my uploadImageToS3 function:

exports = async function(imageName, file) {
  const AWS = require('aws-sdk');

    accessKeyId :context.values.get("AWS_ACCESS_KEY_ID"),
    secretAccessKey : context.values.get("AWS_ACCESS_KEY_SECRET"),
    region: context.values.get("AWS_REGION")
  const s3 = new AWS.S3({apiVersion: '2006-03-01'})
  const bucketName = context.values.get("AWS_BUCKET")
  return s3.upload({
        "Bucket": bucketName,
        "Key" : imageName,
        "Body": file,
        "ACL": "public-read",
        "ContentType": "image/jpeg",

How do I upload a binary image (straight out of a MongoDB document) to S3?

Many thanks in advance!

A post was merged into an existing topic: Convert binary image to Base64 from Realm function