Cloudinary Blog

Node.js File Upload to a Local Server Or to the Cloud

Node.js File Upload to a Local Server Or to the Cloud

Probably one of the best things to happen to JavaScript developers, Node.js empowers them to write and ship JavaScript on the back end. Thanks to Node.js, front-end developers can become full-stack developers in a snap.

The procedures below describe how to Node.js file upload's to your local server or to the cloud at Cloudinary.

How to Optimize for Page Load Speed

Set Up a Node Project

First, download and install Node.js on your system. Afterwards, set up a Node.js back-end server with a package, such as Express. Do the following:

  1. Create an upload directory and run npm init there to generate a package.json file:

    Copy to clipboard
    npm init
  2. In the same directory, install Express:

    Copy to clipboard
    npm install express --save
  3. Create an index.js file with the code below:

    Copy to clipboard
    const express = require('express')
    const app = express()
    const port = 3000
    
    app.get('/', (req, res) => res.json({ message: 'Hello World!' }))
    
    app.listen(port, () => console.log(`This is the beginning of the Node File Upload App`))
  4. Run the project with the command node index.js.

    Your back-end server is now up and running.

    upload

    Afterwards, multer creates an images directory in which to display the details of the recently uploaded file in your console. See this example:

    node upload

    For simultaneous multiple file uploads, just change fileUpload.single to fileUpload.array:

Copy to clipboard
...
app.post('/photos/upload', fileUpload.array('image', 5), function (req, res, next) {
      console.log("Images ", req.file);  
})

5 above can be any numeric value, denoting the number of files you plan to upload.

Step 2: Set up file uploads to Cloudinary

Completing step 1 enables you to upload files to your local server. For multiple files, best store them in a central location like Cloudinary and behind a content delivery network (CDN) at scale for efficient retrieval and delivery to users.

This step establishes the mechanics for uploading files to Cloudinary.

As a prerequisite, sign up for a free account on Cloudinary. Note your cloud name and API keys on the dashboard.

media library

Now do the following.

  1. Rewrite multer to accept zero arguments:

    Copy to clipboard
    const fileUpload = multer()

    Instead of being written to a local directory, the uploaded files now reside in memory temporarily as a buffer.

  2. Install Cloudinary’s Node.js SDK and the streamifier library:

    Copy to clipboard
    npm install cloudinary 
    npm install streamifier
  3. Make the cloudinary and streamifier required libraries in your codebase:

    Copy to clipboard
    ...
    const cloudinary = require('cloudinary').v2
    const streamifier = require('streamifier')
    ...
  4. Rewrite the /upload endpoint code to upload files to Cloudinary:

    Copy to clipboard
    app.post('/upload', fileUpload.single('image'), function (req, res, next) {
    let streamUpload = (req) => {
        return new Promise((resolve, reject) => {
            let stream = cloudinary.uploader.upload_stream(
              (error, result) => {
                if (result) {
                  resolve(result);
                } else {
                  reject(error);
                }
              }
            );
    
           streamifier.createReadStream(req.file.buffer).pipe(stream);
        });
    };
    
    async function upload(req) {
        let result = await streamUpload(req);
        console.log(result);
    }
    
    upload(req);
    });

Recall that you rewrote multer earlier to process and store uploaded files temporarily as a buffer. streamifier now converts the uploaded buffer to a readable stream, after which Cloudinary’s upload_stream method streams directly to the cloud.

The returned result looks like this, complete with the details on the recently uploaded file:

node.js index

Now you can fetch the URL from the JSON response and store it in the database. Mission accomplished.

A Word About Cloudinary’s Node.js SDK

Besides uploading images and videos, Cloudinary’s Node.js SDK can also transform, optimizatize, and deliver them. You can seamlessly integrate those capabilities with your Node.js app. For details, see the related documentation.

Want to Learn More About File Uploads?

Recent Blog Posts

Enhance Your Travel Site With Cloudinary in Anticipation of a Return to New Normal

Read more
The Benefits of Headless DAMs

Headless is not a buzzword anymore. In fact, the concept of headless architecture is gaining momentum due to the flexibility it offers for composing new experiences and for tackling the undue complexity of an ever-evolving technology stack. That’s because while the evolution of the martech landscape has enabled disruptive, digital innovations, the approach of buying point solutions for solving specific challenges can expose companies to the complicated nature of new technologies, systems, and platforms.

Read more

Building Display Ads With Transparent Video

By Afzaal Ahmad Zeeshan
Build Web Ads With Transparent Video to Attract User Engagement

Billions of views on the Internet every day drive one of the biggest industries on the planet: advertising. The sheer size of that market and the competitive nature of vying for consumer attention results in a constant need for innovation. Readers are jaded, and display ads are blind spots.

Read more
How Cloudinary's Media Optimizer Helps E-Businesses Deliver Superior Web Performance

As a technology company, Cloudinary owes its success to its ability to build solutions that address the most critical challenges you, our customers, face. The companies we serve run the gamut of digital businesses—retailers and direct-to-consumer brands, media and entertainment, travel and hospitality—which, coincidentally, all care about the same things.

Read more