DEV Community

Cover image for 🚀 Supercharge Your Next.js App with Stunning Images! Learn the Ultimate Cloudinary Image Upload Hack 🔥
Kishan Sheth
Kishan Sheth

Posted on

🚀 Supercharge Your Next.js App with Stunning Images! Learn the Ultimate Cloudinary Image Upload Hack 🔥

In today's digital world, where images and videos are pivotal in web applications, optimizing the media delivery process is essential for a seamless user experience. One powerful solution for managing and serving media assets is Cloudinary.

In this blog post, we'll explore how to integrate Cloudinary into your Next.js application using the next-cloudinary package.

What is Cloudinary?

Cloudinary is a cloud-based media management platform that provides an end-to-end solution for storing, managing, optimizing, and delivering media assets such as images, videos, and documents. It offers a robust set of features for transforming and serving media efficiently. Cloudinary also helps developers handle tasks like resizing, cropping, and format conversion without the need for complex server-side code.

Why Use Cloudinary with Next.js?

Integrating Cloudinary with your Next.js application brings several benefits:

  1. Optimized Image and Video Delivery: Cloudinary optimizes media assets for faster loading, improving your website's performance and user experience.

  2. Media Transformation: Cloudinary allows you to dynamically transform images and videos to suit various device screen sizes and resolutions, reducing the need for manual asset preparation.

  3. CDN and Caching: Cloudinary leverages a Content Delivery Network (CDN) to deliver assets quickly and efficiently. It also provides caching options for faster load times.

  4. Secure Storage: Cloudinary provides secure and scalable cloud-based storage, reducing the complexity of managing media files on your servers.

  5. Seamless Integration: With the next-cloudinary package, you can easily integrate Cloudinary into your Next.js project.

Setting Up a Next.js Project

Before we integrate Cloudinary, ensure you have a Next.js project up and running. If not, you can create one using the following steps:

  • Install Node.js if you haven't already. You can download it
    from the official website.

  • Create a new Next.js project using the following commands:

   npx create-next-app my-next-cloudinary-app
   cd my-next-cloudinary-app
Enter fullscreen mode Exit fullscreen mode
  • Run the development server with npm run dev. Your Next.js app should now be running at http://localhost:3000.

Integrating Cloudinary with Next.js using next-cloudinary

To integrate Cloudinary with your Next.js application, we'll use the next-cloudinary package, which streamlines the process. Follow these steps:

1. Install the next-cloudinary Package

In your Next.js project directory, install the next-cloudinary package using npm or yarn:

Copy code
npm install next-cloudinary
# or
yarn add next-cloudinary
Enter fullscreen mode Exit fullscreen mode

2. Set Up a Cloudinary Account

If you haven't already, create a Cloudinary account and obtain your API credentials, including your cloud name and image preset.

Cloudianry Homepage

3. Get the Cloud name

After logging in to your Cloudinary account, you will see the dashboard.

Cloudinary Dashboard

Grab your cloud name and copy it in the environment variables of next.config.js file in your nextjs app.

const nextConfig = {
  reactStrictMode: false,
  env: {
    NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME: "*******",
  },
};

module.exports = nextConfig;
Enter fullscreen mode Exit fullscreen mode

Make sure that you name the variable as NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME as the next-cloudinary package automatically reads this environment variable.

4. Get an Unsigned Upload Preset

Now, we will need an Upload Preset to upload images.

Click on the settings icon in the left sidebar in your Cloudinary Account.

Cloudianry Settings Icon

Now, you will see the Accounts Page. Click on the Upload Tab from the left sidebar to head over to upload settings.

Cloudianry Settings Page

Now, you will see the upload page. On this page, you will see the Upload Presets section. Click Enable unsigned uploading from there to get an unsigned upload preset.

Cloudianry Uplaod Settings

As soon as you click it, you will see an upload preset. Copy that upload preset.

Upload Preset

Paste this upload preset as an environment variable in the next.config.js file in your next.js app.

const nextConfig = {
  reactStrictMode: false,
  env: {
    NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME: "********",
    NEXT_PUBLIC_CLOUDINARY_PRESET_NAME:"********"
  },
};
module.exports = nextConfig;
Enter fullscreen mode Exit fullscreen mode

We are going to name the environment variable as NEXT_PUBLIC_CLOUDINARY_PRESET_NAME.

That's it. We have all the things that are required for the setup.

5. Add Cloudinary in the allowed domains

In Next.js applications, when you serve images from a domain that differs from the current domain of your application, you need to specify the external domain in the next.config.js file.

const nextConfig = {
  reactStrictMode: false,
  env: {
    NEXT_PUBLIC_CLOUDINARY_CLOUD_NAME: "********",
    NEXT_PUBLIC_CLOUDINARY_PRESET_NAME:"********"
  },
  images: {
    domains: ["res.cloudinary.com"],
  },
};
module.exports = nextConfig;
Enter fullscreen mode Exit fullscreen mode

Add the res.cloudinary.com in the images section.

6. Use next-cloudinary in Your Components

Now, we can use Cloudinary in our components to upload the images.

The next-cloudinary package exposes a component named as CldUploadButton. We are going to use that component for image upload. Here's the code.

"use client";
import { CldUploadButton } from "next-cloudinary";
export default function Photos() {
  return (
    <div>    
      <CldUploadButton
        options={{ multiple: true }}
        uploadPreset={process.env.NEXT_PUBLIC_CLOUDINARY_PRESET_NAME}
      >
        <span>
          Upload
        </span>
      </CldUploadButton>
    </div>
  );
}

Enter fullscreen mode Exit fullscreen mode

Make sure that you have the environment variable in place for uploadPreset.

And that's it. With this, we have completed the setup for Cloudianry to upload the images.

Here's a demo

Cloudianry Image Upload

Cloudianry Image Upload Results

Conclusion

In this comprehensive guide, we've covered the benefits of integrating Cloudinary with Next.js and provided a step-by-step tutorial on using the next-cloudinary package to easily manage and serve media assets. Following these steps can enhance your web application's performance, optimize media delivery, and provide a superior user experience. Cloudinary is a powerful tool for managing media, and when combined with Next.js, it becomes a dynamic duo for building efficient and visually stunning web applications. Start harnessing the power of Cloudinary in your Next.js project today!

Top comments (9)

Collapse
 
joe_codes1 profile image
Joe Code

Nice explanation can this work with react? If yes I'll be grateful if you could write an article on how to implement this logic using React
Thanks

Collapse
 
kishansheth profile image
Kishan Sheth

I am not sure if this would work with React. I have never tried :-)
I'll try to create a demo for the same and create a blog post in a few days.

Collapse
 
joe_codes1 profile image
Joe Code

Awesome it would be nice if it works on react too

Collapse
 
rick_beacham_99e276df06e2 profile image
Rick Beacham
Collapse
 
andrewmalik profile image
Andrew Malik

That's an awesome article Kishan. Just what I was looking for. Thankyou.

Collapse
 
kishansheth profile image
Kishan Sheth

I'm glad it helped @andrewmalik

Collapse
 
rick_beacham_99e276df06e2 profile image
Rick Beacham

Could you show this would work in a Cornerstone theme that uses Stencil framework.🥹😜

Collapse
 
jonahunuafe profile image
Jonah Unuafe

Nice one but how do I make the uploaded image to be displayed on my home page. Am using MongoDB database.

Collapse
 
rick_beacham_99e276df06e2 profile image
Rick Beacham

This is tutorial is specific to NEXT.JS. What stack are you using exactly?

Next.js would likely have index.* file that would tell you what is the home page.