├── .gitignore ├── pdfs └── 1647247833529.pdf ├── images └── 1647247366883.jpeg ├── routes ├── index.js └── common.js ├── config └── db.js ├── models └── commonSchema.js ├── index.js ├── package.json └── controllers └── commonController.js /.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | node_modules 3 | /*txt 4 | /*pdf 5 | test-image.jpg -------------------------------------------------------------------------------- /pdfs/1647247833529.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Axitvadi/Add-image-and-pdf-in-server-using-base64-and-fs-module/HEAD/pdfs/1647247833529.pdf -------------------------------------------------------------------------------- /images/1647247366883.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Axitvadi/Add-image-and-pdf-in-server-using-base64-and-fs-module/HEAD/images/1647247366883.jpeg -------------------------------------------------------------------------------- /routes/index.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | const router = express.Router() 3 | const common = require("./common") 4 | 5 | router.use('/common',common) 6 | 7 | module.exports = router -------------------------------------------------------------------------------- /config/db.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose') 2 | require("../models/commonSchema") 3 | 4 | mongoose.Promise = global.Promise 5 | 6 | mongoose.connect(process.env.URL) 7 | 8 | let db = mongoose.connection 9 | 10 | db.once('open',()=>{console.log('database successfully connected to local database !')}) -------------------------------------------------------------------------------- /models/commonSchema.js: -------------------------------------------------------------------------------- 1 | "use strict" 2 | let mongoose = require('mongoose') 3 | 4 | let commonSchema = new mongoose.Schema({ 5 | image:{ 6 | type:String 7 | }, 8 | pdf:{ 9 | type:String 10 | } 11 | }, 12 | { 13 | timestamps:true 14 | }) 15 | 16 | let common = mongoose.model('common',commonSchema) 17 | module.exports = common -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config(); 2 | const express = require('express') 3 | const bodyparser = require('body-parser'); 4 | const app = express(); 5 | require("./config/db") 6 | const router = require("./routes/index") 7 | 8 | app.use(bodyparser.json({limit:'1024mb'})) 9 | app.use(bodyparser.urlencoded({limit:'1024mb',extended:false})) 10 | 11 | app.use(router) 12 | 13 | const port = process.env.PORT || 4000 14 | app.listen(port, ()=>{console.log(`server successfully started at port ${port} !`)}) 15 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pdf_image_intigration", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "node index.js", 9 | "watch": "nodemon index.js" 10 | }, 11 | "author": "Axit", 12 | "license": "MIT", 13 | "dependencies": { 14 | "dotenv": "^16.0.0", 15 | "express": "^4.17.3", 16 | "mongoose": "^6.2.6", 17 | "nodemon": "^2.0.15" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /routes/common.js: -------------------------------------------------------------------------------- 1 | const express = require('express') 2 | const router = express.Router() 3 | const commoncontroller = require("../controllers/commonController") 4 | 5 | router.post('/uploadimage',commoncontroller.data.addimage) 6 | router.post('/uploadpdf',commoncontroller.data.addpdf) 7 | router.post('/getimage',commoncontroller.data.getimage) 8 | router.post('/getpdf',commoncontroller.data.getpdf) 9 | router.delete('/deleteimage',commoncontroller.data.deleteimg) 10 | router.delete('/deletepdf',commoncontroller.data.deletepdf) 11 | 12 | module.exports = router -------------------------------------------------------------------------------- /controllers/commonController.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose') 2 | const COMMON = mongoose.model('common') 3 | const fs = require('fs'); 4 | 5 | exports.data = { 6 | addimage: async (req, res) => { 7 | try { 8 | const path = this.data.imagepath(); 9 | const baseImage = req.body.image; 10 | if (!baseImage.startsWith('data:')) return res.json({ 11 | alert: "base64 is not" 12 | }); 13 | //Find extension of file 14 | const ext = baseImage.substring(baseImage.indexOf('/') + 1, baseImage.indexOf(';base64')); 15 | const fileType = baseImage.substring('data:'.length, baseImage.indexOf('/')); 16 | //Forming regex to extract base64 data of file. 17 | const regex = new RegExp(`^data:${fileType}\/${ext};base64,`, 'gi'); 18 | //Extract base64 data. 19 | const base64Data = baseImage.replace(regex, ''); 20 | const filename = `${new Date().valueOf()}.${ext}`; 21 | fs.writeFileSync(path + filename, base64Data, 'base64'); 22 | delete req.body.image; 23 | req.body.image = filename; 24 | const created = await COMMON.create(req.body); 25 | if (created) { 26 | return res.json({ 27 | success: true, 28 | message: 'file uploaded successfully !' 29 | }) 30 | } else { 31 | return res.json({ 32 | success: false, 33 | message: 'failed to upload file !' 34 | }) 35 | } 36 | } catch (err) { 37 | return res.json(err) 38 | } 39 | }, 40 | addpdf: async (req, res) => { 41 | try { 42 | const path = this.data.pdfspath(); 43 | const basePdf = req.body.pdf; 44 | if (!basePdf.startsWith('data:')) return res.json({ 45 | alert: "base64 is not" 46 | }); 47 | //Find extension of file 48 | const ext = basePdf.substring(basePdf.indexOf('/') + 1, basePdf.indexOf(';base64')); 49 | const fileType = basePdf.substring('data:'.length, basePdf.indexOf('/')); 50 | //Forming regex to extract base64 data of file. 51 | const regex = new RegExp(`^data:${fileType}\/${ext};base64,`, 'gi'); 52 | //Extract base64 data. 53 | const base64Data = basePdf.replace(regex, ''); 54 | const filename = `${new Date().valueOf()}.${ext}`; 55 | fs.writeFileSync(path + filename, base64Data, 'base64'); 56 | delete req.body.pdf; 57 | req.body.pdf = filename; 58 | const created = await COMMON.create(req.body); 59 | if (created) { 60 | return res.json({ 61 | success: true, 62 | message: 'file uploaded successfully !' 63 | }) 64 | } else { 65 | return res.json({ 66 | success: false, 67 | message: 'failed to upload file !' 68 | }) 69 | } 70 | } catch (err) { 71 | return res.json(err) 72 | } 73 | }, 74 | getimage: async (req, res) => { 75 | try { 76 | const imageName = req.body.image 77 | const imgpath = this.data.imagepath() 78 | fs.readFile(`${imgpath}${imageName}`, 'base64', function(err, data){ 79 | if(err){ 80 | return res.json(err) 81 | }else{ 82 | const result = "data:image/jpeg;base64,"+data 83 | return res.json({ 84 | result:result 85 | }) 86 | } 87 | }) 88 | } catch (err) { 89 | return res.json(err) 90 | } 91 | }, 92 | getpdf: async (req, res) => { 93 | try { 94 | const pdfName = req.body.pdf 95 | const pdfpath = this.data.pdfspath() 96 | fs.readFile(`${pdfpath}${pdfName}`, 'base64', function(err, data){ 97 | if(err){ 98 | return res.json(err) 99 | }else{ 100 | const result = "data:application/pdf;base64,"+data 101 | return res.json({ 102 | result:result 103 | }) 104 | } 105 | }) 106 | } catch (err) { 107 | return res.json(err) 108 | } 109 | }, 110 | deleteimg: async (req,res) => { 111 | try { 112 | const imageName = req.body.image 113 | const imagePath = this.data.imagepath() 114 | if(imageName){ 115 | fs.unlink(`${imagePath}${imageName}`,(err) => { 116 | if(err) return res.json(err) 117 | return res.json({ 118 | message:'file deleted successfully' 119 | }) 120 | }) 121 | } 122 | } catch (err) { 123 | return res.json(err) 124 | } 125 | }, 126 | deletepdf: async (req,res) => { 127 | try { 128 | const pdfName = req.body.pdf 129 | const pdfPath = this.data.pdfspath() 130 | if(pdfName){ 131 | fs.unlink(`${pdfPath}${pdfName}`,(err) => { 132 | if(err) return res.json(err) 133 | return res.json({ 134 | message:'file deleted successfully' 135 | }) 136 | }) 137 | } 138 | else{ 139 | return res.json({ 140 | message:"please Enter pdf name " 141 | }) 142 | } 143 | } catch (err) { 144 | return res.json(err) 145 | } 146 | }, 147 | imagepath: function () { 148 | const basepath = __dirname; 149 | const splitdir = basepath.split("\\") 150 | splitdir.pop() 151 | const path = splitdir.join("/") + "/images/" 152 | return path 153 | }, 154 | pdfspath: function () { 155 | const basepath = __dirname 156 | const splitdir = basepath.split('\\') 157 | splitdir.pop() 158 | const path = splitdir.join("/") + "/pdfs/" 159 | return path 160 | } 161 | } --------------------------------------------------------------------------------