Create File Upload rest Api NodeJs using NPM Package MULTER
NodeJs
NPM
MULTER
API
File Upload
Upload
- By Code solution
- Jan 20th, 2021
- 0 comments
- 0
Create File Upload rest API NodeJs using NPM Package MULTER. We are using NPM package multi and upload file like an image, doc, pdf, zip etc..I am uploading the only image you can upload other files.
Project Structure :
Project Name // Project directory - node_modules // Npm Package - package-lock.json. // package-lock.json - package.json // package.json - server.js // server.js file - Public // Html View and Angualrjs file
Create a new Directory, we can run the following command:
mkdir <directoryname>
Then move into the newly created directory:
cd <directoryname>
then run this command :
npm init
and fill this information like that :
package name: (directoryname)
version: (1.0.0)
description:
entry point: (index.js) server.js
test command:
git repository:
keywords:
author:
license: (ISC)
{"name": "curlapi", "version": "1.0.0","description": "", "main": "server.js","scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC"}Is this ok? (yes) yes then enter
After creating project install node package run command:
npm install --save express morgan body-parser method-override multer fs
create the server.js file and add this code :
// set up ========================
var express = require('express');
var app = express(); // create our app w/ express
var morgan = require('morgan'); // log requests to the console (express4)
var mongoose = require('mongoose');
var bodyParser = require('body-parser'); // pull information from HTML POST (express4)
var methodOverride = require('method-override');
var multer = require('multer');
var fs = require("fs");
app.use(function(req, res, next) { //allow cross origin requests
if (req.method === 'OPTIONS') {
console.log('!OPTIONS');
var headers = {};
headers["Access-Control-Allow-Origin"] = "*";
headers["Access-Control-Allow-Methods"] = "POST, GET, PUT, DELETE, OPTIONS";
headers["Access-Control-Allow-Credentials"] = false;
headers["Access-Control-Max-Age"] = '86400'; // 24 hours
headers["Access-Control-Allow-Headers"] = "X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept";
res.writeHead(200, headers);
res.end();
}
res.setHeader("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", "POST, PUT, OPTIONS, DELETE, GET");
res.header("Access-Control-Max-Age", "3600");
res.header("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
next();
});
// configuration
app.use(express.static(__dirname + '/public')); // set the static files location /public/img will be /img for users
app.use('/public/uploads',express.static(__dirname + '/public/uploads'));
app.use(morgan('dev')); // parse application/json
app.use(bodyParser.json({ type: 'application/vnd.api+json' })); // parse application/vnd.api+json as json
// file upload code
var storage = multer.diskStorage({ //multers disk storage settings
destination: function (req, file, cb) {
cb(null, './public/uploads/')
},
filename: function (req, file, cb) {
// console.log(file);
var datetimestamp = Date.now();
cb(null, file.fieldname + '-' + datetimestamp + '.' + file.originalname.split('.')[file.originalname.split('.').length -1])
}
});
var uploadMultiple = multer({ //multer settings
storage: storage
}).array('file',20);
var uploadSingle = multer({ //multer settings
storage: storage
}).single('file');
app.get('*', function(req, res) {
res.sendfile('./public/index.html'); // load our public/index.html file
});
/** API for single file upload */
app.post('/api/uploadPhoto', function(req, res) {
uploadSingle(req,res,function(err){
if(err){
res.json({error_code:1,err_desc:err});
return;
}
res.json(req.file);
})
});
/** API for single file upload */
app.post('/api/uploadPhotos', function(req, res) {
uploadMultiple(req,res,function(err){
if(err){
console.log(err);
res.json({error_code:1,err_desc:err});
return;
}
res.json(req.files);
})
});
app.listen(process.env.PORT || 9000, function(){console.log("App listening on port 9000");});