Back to Blog
Blog

How to Upload Media to Your Bucket Using the Cosmic API

Tony Spiro's avatar

Tony Spiro

December 03, 2016

cover image


In this short tutorial I’m going to show you how to:

1. Upload an image to your Cosmic Bucket via the Cosmic API.
2. Alter your image using the powerful Imgix processing service (free with every Cosmic Bucket)
3. Add the uploaded image as a Metafield to an Object in your Bucket

Getting Started

Sign up for Cosmic to create your own Bucket or just follow along with the examples.  

To start, let's create a simple HTML form to upload our media.

<html>
  <body>
    <form action="https://api.cosmicjs.com/v1/bucket-slug/media" method="post" enctype="multipart/form-data">
      <input type="file" name="media" />
      <input type="submit" value="Upload!" />
    </form>   
  </body>
</html>
Next let's add a file and let it rip.  Notice we now have data to use for data fetching / storing:
{
  "media": {
    "name": "57319310-b914-11e6-acef-b1b7e94fa195-earth.png",
    "original_name": "earth.png",
    "size": 1024912,
    "type": "image/png",
    "bucket": "5839c67f0d3201c114000004",
    "created": "2016-12-03T04:52:49.516Z",
    "location": "https://www.cosmicjs.com/uploads",
    "url": "https://www.cosmicjs.com/uploads/57319310-b914-11e6-acef-b1b7e94fa195-earth.png",
    "imgix_url": "https://cosmicjs.imgix.net/57319310-b914-11e6-acef-b1b7e94fa195-earth.png",
  }
}

The Power of Imgix

After we POST our media to our Cosmic Bucket, one of the pieces of data returned is an Imgix URL.  Imgix gives us powerful image processing capability on the fly.  By simply adding query parameters to the end of the Imgix url, we have the power to resize, crop, add filters and more to our uploaded images.  For example, to resize this image to 2X mobile size just add "?w=640" at the end of the url:

https://cosmicjs.imgix.net/57319310-b914-11e6-acef-b1b7e94fa195-earth.png?w=640

This makes creating light-weight responsive websites much easier because now we don't have to upload multiple images for different devices.  All we do now is program the url to serve the size we want.  Browse the Imgix docs to see all the capabilities at your fingertips.  Imgix is included free with every Cosmic account.

Adding the Uploaded Image to an Object

After adding our image to our Cosmic Bucket we may want to add it to an Object.  To do this we'll simply take the "name" value returned after we POST our media and add it as a file Metafield value and POST this to our Add Object API endpoint:

POST /v1/:your-bucket-slug/add-object
{
  "title": "New Object",
  "slug": "new-object",
  "type_slug": "tests",
  "content": "",
  "metafields": [{
    "type": "file",
    "title": "Image",
    "key": "image",
    "value": "57319310-b914-11e6-acef-b1b7e94fa195-earth.png"
  }]
}

Now when we go into our Cosmic Bucket we'll notice that the "Tests" Object Type has a new Object titled "New Object" with our newly uploaded file as a file Metafield.

Conclusion

Cosmic makes it really easy to add dynamic content to any website or application.  In this tutorial I showed you how you can use the Cosmic API to add media, process images using the available Imgix processing URL then save that image to an Object in our Bucket for easy editing later.  To learn more about how Cosmic makes it easy to store media and power content for your websites and apps, check out the Documentation page.

I hope you enjoyed this tutorial.  If you have any questions or would like to learn more about how Cosmic can help you build content-powered apps faster and easier join Cosmic on Slack and reach out to us on Twitter.