//routes/admin/upload.js
//npm install multer
import path from 'path'
import express from 'express'
const uploadRoute = express.Router()

uploadRoute.get('/',async function(req,res){
    if(req.session.user){
        const module = await import('../../controllers/admin/upload/get.js')
        module.default(req,res)
    }else{
        res.redirect('/admin/login')
    }
})

import multer from 'multer'
const __dirname = path.resolve()
const storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, path.join(__dirname, 'public/uploads/'))
    },
    filename: function (req, file, cb) {
        const id = Date.now() + Math.round(Math.random() * 1E9).toString()
        cb(null, id + '-' + file.originalname)
    }
})
  
const upload = multer({storage: storage})

uploadRoute.post('/',upload.single("uploadFile"),async function(req,res,next){
    if(req.session.user){
        const module = await import('../../controllers/admin/upload/read.js')
        module.default(req,res,next)
    }else{
        res.redirect('/admin/login')
    }
})

export default uploadRoute

 

//controllers/admin/upload/read.js
import settings from '../../../settings.js'

let mySettings = JSON.parse(JSON.stringify(settings))

export default (req,res,next)=>{
    const file = req.file
    if (!file) {
        const error = new Error('Please upload a file')
        error.httpStatusCode = 400
        return next(error)
    }

    mySettings.pageTitle = 'ទំព័រ​ Upload'
    mySettings.route = '/admin/upload'
    mySettings.fileUrl = file.filename

    res.render('base',{data:mySettings})
 }

 

<!--views/admin/upload.ejs-->
<link href="/styles/admin/upload.css" rel="stylesheet"></link>

    <div class='Upload'>
        <form action='/admin/upload' method='post' enctype="multipart/form-data">
            <input type='file' name='uploadFile' required />
            <input type='text' value='<%= data.fileUrl %>' 
                placeholder='តំណរភ្ជាប់ឯ​កសារ​នៅ​លើ Server' />
            <input type='submit' value='បញ្ជូន​ទិន្នន័យ' />
        </form>
    </div>

 

GitHub: https://github.com/Sokhavuth/Blog_

Vercel: https://khmerweb-blog.vercel.app/