Cloudinary and Vue.js Tutorial: Creating Dynamic Image Thumbnails – DevJams Episode #30

Posted by


Introduction
In this tutorial, we will learn how to dynamically generate image thumbnails using Cloudinary and integrate them into a Vue.js application. Cloudinary is a cloud-based image and video management solution that allows you to easily store, manipulate, and deliver images and videos for your web application. Vue.js is a progressive JavaScript framework that is used to build interactive user interfaces. By combining Cloudinary and Vue.js, we can create a powerful and efficient solution for working with image thumbnails in our web applications.

Prerequisites
Before we get started with this tutorial, make sure you have the following prerequisites installed on your machine:

Node.js and npm: Install Node.js and npm on your machine by downloading and installing the latest version from the official website.
Vue CLI: Install Vue CLI on your machine by running the following command in your terminal:

npm install -g @vue/cli

Cloudinary Account: Sign up for a Cloudinary account if you don’t already have one. You can sign up for a free account that allows you to store up to 25 GB of storage and 25 GB of bandwidth per month.

Setting up Cloudinary
Once you have signed up for a Cloudinary account, you will need to obtain your Cloudinary API credentials. These credentials will be used to authenticate your application with the Cloudinary API. To obtain your API credentials, follow these steps:

  1. Log in to your Cloudinary account.
  2. Navigate to the "Dashboard" section.
  3. Click on the "Account Details" tab.
  4. Copy your Cloud name, API key, and API secret. You will need these credentials to authenticate your application with the Cloudinary API.

Now that you have obtained your Cloudinary API credentials, let’s move on to setting up our Vue.js application.

Setting up the Vue.js Application
To create a new Vue.js application, run the following command in your terminal:

vue create dynamic-thumbnails

Follow the prompts to set up your Vue.js application. Once the setup is complete, navigate to the project directory by running the following command:

cd dynamic-thumbnails

Next, install the Cloudinary SDK for JavaScript by running the following command:

npm install cloudinary-core

Now that we have set up our Vue.js application and installed the Cloudinary SDK, let’s start integrating Cloudinary into our application.

Integrating Cloudinary into the Vue.js Application
To integrate Cloudinary into our Vue.js application, we will follow these steps:

  1. Create a new component for displaying the image thumbnails.
  2. Set up the Cloudinary configuration in the main JavaScript file.
  3. Upload images to Cloudinary and generate image thumbnails.
  4. Display the image thumbnails in the Vue.js application.

Create a new component
Create a new component called ImageThumbnail.vue inside the src/components directory of your Vue.js application. This component will be responsible for displaying the image thumbnails. Add the following code to the ImageThumbnail.vue file:

<template>
  <div>
    <img :src="imageUrl" alt="Thumbnail" />
  </div>
</template>

<script>
export default {
  props: {
    publicId: {
      type: String,
      required: true,
    },
  },
  computed: {
    imageUrl() {
      return `https://res.cloudinary.com/${cloudName}/image/upload/c_scale,w_200/${this.publicId}`;
    },
  },
};
</script>

In this code, we have defined a Vue.js component called ImageThumbnail that takes a publicId prop as input. The publicId prop represents the unique identifier of the image stored in Cloudinary. Inside the imageUrl computed property, we dynamically generate the URL for the image thumbnail by interpolating the cloudName and publicId prop values.

Set up the Cloudinary configuration
In the main JavaScript file of your Vue.js application, typically src/main.js, import the Cloudinary SDK and configure the Cloudinary API credentials. Add the following code to the main.js file:

import cloudinary from 'cloudinary-core';

const cloudinaryCore = new cloudinary.Cloudinary({
  cloud_name: 'YOUR_CLOUD_NAME',
  api_key: 'YOUR_API_KEY',
  api_secret: 'YOUR_API_SECRET',
});

In this code, we import the cloudinary-core package and create an instance of the Cloudinary class with your Cloudinary API credentials. Replace 'YOUR_CLOUD_NAME', 'YOUR_API_KEY', and 'YOUR_API_SECRET' with your actual Cloudinary API credentials.

Upload images to Cloudinary and generate image thumbnails
To upload images to Cloudinary and generate image thumbnails, we can use the Cloudinary SDK methods provided by the cloudinary-core package. Add the following code to the ImageThumbnail.vue component:

methods: {
  async uploadImage() {
    const fileInput = document.createElement('input');
    fileInput.type = 'file';
    fileInput.accept = 'image/*';
    fileInput.onchange = async () => {
      const file = fileInput.files[0];
      const formData = new FormData();
      formData.append('file', file);

      const result = await fetch(`https://api.cloudinary.com/v1_1/${cloudName}/image/upload`, {
        method: 'POST',
        body: formData,
      });

      const data = await result.json();
      this.publicId = data.public_id;
    };
    fileInput.click();
  },
},

In this code, we define a uploadImage method that creates a file input element, listens for changes in the selected file, uploads the file to Cloudinary using the fetch API, and sets the publicId prop with the unique identifier of the uploaded image.

Display the image thumbnails
To display the image thumbnails in the Vue.js application, import the ImageThumbnail component and use it in the template of your main Vue component. Add the following code to your main Vue component file:

<template>
  <div>
    <ImageThumbnail :publicId="publicId" />
    <button @click="uploadImage">Upload Image</button>
  </div>
</template>

<script>
import ImageThumbnail from './components/ImageThumbnail.vue';

export default {
  components: {
    ImageThumbnail,
  },
  data() {
    return {
      publicId: '',
    };
  },
  methods: {
    uploadImage() {
      this.$refs.imageThumbnail.uploadImage();
    },
  },
};
</script>

In this code, we import the ImageThumbnail component and define a publicId data property to store the unique identifier of the uploaded image. The uploadImage method triggers the uploadImage method of the ImageThumbnail component when the "Upload Image" button is clicked.

Conclusion
In this tutorial, we have learned how to dynamically generate image thumbnails using Cloudinary and integrate them into a Vue.js application. By following the steps outlined in this tutorial, you can easily manage and display image thumbnails in your web applications using Cloudinary and Vue.js. Experiment with different Cloudinary SDK methods and Vue.js features to customize the image thumbnail generation and display according to your requirements. Happy coding!