<form action="/profile" method="post" enctype="multipart/form-data">
<input type="file" name="avatar" />
</form>
-----Configer Multer -------
const multer = require("multer");
const path = require("path")
const storage = multer.diskStorage({
destination(req, file, cb) {
cb(null, 'public/uploads')
},
filename(req, file, cb) {
console.log(path.extname, file.originalname)
cb(null, `${file.fieldname}-${Date.now()}-${Math.round(Math.random()*1E9)}${path.extname(file.originalname)}`)
}
})
const checkFileType = (file, cb) => {
const fileType = /jpg|jpeg|png/
const extname = fileType.test(path.extname(file.originalname).toLowerCase())
const mimetype = fileType.test(file.mimetype)
if (extname && mimetype) {
return cb(null, true)
} else {
cb(new Error("Only Image Support!"), false)
}
}
const upload = multer({
storage,
limits: {
fileSize: 5e+6
},
fileFilter(req,file,cb){
checkFileType(file,cb)
}
})
app.post('/', upload.single('fild-name'), (req, res) => {
res.send(`/${req.file.path}`)
})
//OR => For Error Handling
app.post('/', (req, res,next) => {
upload(req, res, async (err) => {
if (err) {
return next(new Error("Server Error"))
}
const filePath = req.file.path
console.log(req.body)
let { error } = productSchema.validate(req.body)
if (error) {
fs.unlink(root + "/" + filePath, (err) => {
if (err) {
return next(new Error("Server Error"))
}
})
return next(error)
}
let { name, price, size, image } = req.body
let document
try {
document = await ProductModel.create({
name,
price,
size,
image: filePath
})
} catch (err) {
return next(err)
}
res.status(201).json(document)
res.send({})
})
})
var express = require('express')var app = express()var multer = require('multer')var upload = multer() app.post('/profile', upload.none(), function (req, res, next) { // req.body contains the text fields})
var express = require('express')var multer = require('multer')var upload = multer({ dest: 'uploads/' }) var app = express() app.post('/profile', upload.single('avatar'), function (req, res, next) { // req.file is the `avatar` file // req.body will hold the text fields, if there were any}) app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) { // req.files is array of `photos` files // req.body will contain the text fields, if there were any}) var cpUpload = upload.fields([{ name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 }])app.post('/cool-profile', cpUpload, function (req, res, next) { // req.files is an object (String -> Array) where fieldname is the key, and the value is array of files // // e.g. // req.files['avatar'][0] -> File // req.files['gallery'] -> Array // // req.body will contain the text fields, if there were any})