Sibeesh Passion

Upload Files Or Images To Server Using Node JS




Upload Files Or Images To Server Using Node JS
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

In this post we will see how we can upload files or images to server using Node JS. Here we are going to use Visual Studio for our development and preceding NPM packages for our easy development.

  • express
  • multer
  • body-parser
  • We will briefly explain the use of these packages. As you all know Node JS is a run time environment built on Chrome’s V8 JavaScript engine for server side and networking application. And it is an open source which supports cross platforms. Node JS applications are written in pure JavaScript. If you are new to Node JS, I strongly recommend you to read my previous posts about Node JS here.

    Download source code

  • Upload Files Or Images To Server Using Node JS
  • Background

    Few years back if you need to upload any files or images to server, you were completely depended on server side languages like C# and PHP. Everything is changed after the revolution of Node JS. Here I will show you how to upload the files to server using Node JS, without writing even a single line of server side code. I hope you will like this.

    Create a Blank Node JS Web Application

    Create a blank Node JS web application.

    new_node_js_web_application

    new_node_js_web_application

    Set Up Dependencies in package.json

    To get started, we will set up our dependencies first. To do so, please open your package.json file and paste the preceding code.

    {
      "name": "node_js_file_upload",
      "version": "0.0.1",
      "description": "Node_JS_File_Upload",
      "main": "server.js",
      "dependencies": {
        "body-parser": "^1.15.2",
        "express": "^4.14.0",
        "multer": "^1.2.0"
      },
      "author": {
        "name": "Sibeesh"
      }
    }
    

    Now, run the NPM install command as follows.

    npm install
    

    Once you run the command, you can see that the dependencies are installed in the solution.

    npm-packages

    npm-packages

    Now we can understand what are these dependencies used for.

  • express
  • As per the Express Team, Express is a minimal and flexible Node.js web application framework that provides a robust set of features for web and mobile applications.Express provides a thin layer of fundamental web application features, without obscuring Node.js features that you know and love. You can always learn more about Express Package here

  • multer
  • Multer is a node.js middleware for handling multipart/form-data, which is primarily used for uploading files. It is written on top of busboy for maximum efficiency. Please read more about multer package here.

    Start using our dependencies

    You can create the instances of our dependencies as follows.

    var Express = require('express');
    var multer = require('multer');
    var bodyParser = require('body-parser');
    var app = Express();
    app.use(bodyParser.json());
    

    Then, it is time to create a storage which says where and how the files/images should be saved.

    var Storage = multer.diskStorage({
        destination: function (req, file, callback) {
            callback(null, "./Images");
        },
        filename: function (req, file, callback) {
            callback(null, file.fieldname + "_" + Date.now() + "_" + file.originalname);
        }
    });
    

    Each file contains the following information:

    fieldname : Field name specified in the form
    originalname : Name of the file on the user’s computer
    encoding : Encoding type of the file
    mimetype : Mime type of the file
    size : Size of the file in bytes
    destination : The folder to which the file has been saved
    filename : The name of the file within the destination
    path : The full path to the uploaded file
    buffer : A Buffer of the entire file

    Now please create multer object as follows.

    var upload = multer({ storage: Storage }).array("imgUploader", 3); //Field name and max count
    

    Here multer accepts the storage we created in our previous step as the parameter. The function

    array(fieldname[, maxCount])

    accept an array of files, all with the name fieldname.

    Now it is time to write our post and get action.

    app.get("/", function (req, res) {
        res.sendFile(__dirname + "/index.html");
    });
    
    app.post("/api/Upload", function (req, res) {
        upload(req, res, function (err) {
            if (err) {
                return res.end("Something went wrong!");
            }
            return res.end("File uploaded sucessfully!.");
        });
    });
    

    Here /api/Upload is the action name we are going to set in out HTML page which we will create soon. And last but not the least, we need to make sure that the app is listening to our particular port, in this case it is port 2000.

    app.listen(2000, function (a) {
        console.log("Listening to port 2000");
    });
    

    Create HTML page and set up uploading

    You can create the page as follows with the references of the jquery-3.1.1.min.js and jquery.form.min.js.

    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="utf-8" />
        <title>Upload images to server using Node JS</title>
        <script src="Scripts/jquery-3.1.1.min.js"></script>
        <script src="Scripts/jquery.form.min.js"></script>
        
    </head>
    <body>
        <form id="frmUploader" enctype="multipart/form-data" action="api/Upload/" method="post">
            <input type="file" name="imgUploader" multiple />
            <input type="submit" name="submit" id="btnSubmit" value="Upload" />
        </form>
    </body>
    </html>
    

    Please be noted that the ecctype for your form must be multipart/form-data and the action must be same as we set in our API.

    Create Ajax submit event

    Now it is time to create our ajax event where we are going to call our API.

    <script>
            $(document).ready(function () {
                var options = {
                    beforeSubmit: showRequest,  // pre-submit callback
                    success: showResponse  // post-submit callback
                };
    
                // bind to the form's submit event
                $('#frmUploader').submit(function () {
                    $(this).ajaxSubmit(options);
                    // always return false to prevent standard browser submit and page navigation
                    return false;
                });
            });
    
            // pre-submit callback
            function showRequest(formData, jqForm, options) {
                alert('Uploading is starting.');
                return true;
            }
    
            // post-submit callback
            function showResponse(responseText, statusText, xhr, $form) {
                alert('status: ' + statusText + '\n\nresponseText: \n' + responseText );
            }
        </script>
    

    ajaxSubmit function is part of the plugin jquery.form.min.js, so please make sure that you have included it.

    Run your application

    Now please run your application. Before running your application, you can always set your script file as your start up file, to set it, please right click on your project and click on properties.

    set-start-up-file

    set-start-up-file

    Now you can open your command prompt, you can manually locate your project in command prompt or you can use the ‘Open command prompt here’ option. To select, please right click on your project and select the option as follows.

    open_command_prompt_here_option

    open_command_prompt_here_option

    Now type node server.js in your command prompt which will make sure that your server is running. And if everything is fine, you can see a window as follows.

    node_server_js_output

    node_server_js_output

    We can run our webpage now as our server is ready, please go to your browser and type the URL as http://localhost:2000. Select few files using the file uploader we have created.

    select_fiels_in_file_upload

    select_fiels_in_file_upload

    If you click submit, you can see we are calling our method action and the files are uploaded.

    file_uploaded_successfully_

    file_uploaded_successfully_

    solution_explorer_window_after_saving_files

    solution_explorer_window_after_saving_files

    You can always download the source code attached to see the complete code and application. Happy coding!.

    See also

  • Multer Package for Node JS
  • Express JS Package for Node JS
  • Body Parser Package for Node JS
  • Conclusion

    Did I miss anything that you may think which is needed? Could you find this post as useful? I hope you liked this article. Please share me your valuable suggestions and feedback.

    Your turn. What do you think?

    A blog isn’t a blog without comments, but do try to stay on topic. If you have a question unrelated to this post, you’re better off posting it on C# Corner, Code Project, Stack Overflow, Asp.Net Forum instead of commenting here. Tweet or email me a link to your question there and I’ll definitely try to help if I can.

    Kindest Regards
    Sibeesh Venu

    Footer With Address And Phones