express上传文件、访问文件

168 阅读1分钟
  • 安装 multer

npm i multer

  • upload.js

    /* 上传文件工具 */

    const fs = require('fs') const path = require('path') var multer = require('multer') const {filePath} = require('../config.js')

    const upload = multer({ storage: multer.diskStorage({ //设置文件存储位置 destination: function(req, file, cb) { let dir = filePath //图片存储的目录 //判断目录是否存在,没有则创建 if (!fs.existsSync(dir)) { fs.mkdirSync(dir, { recursive: true }) } //dir就是上传文件存放的目录 cb(null, dir) }, //设置文件名称 filename: function(req, file, cb) { // 取无后缀的文件名 let ex_name = file.originalname.split('.')[0] //防止文件名重复,为文件名加上时间戳 let fileName = ex_name + '-' + Date.now() + path.extname(file.originalname) //fileName就是上传文件的文件名 cb(null, fileName) } }) })

    module.exports = upload

  • router文件

    /* 公告管理路由模块 */

    var express = require('express') // 导入文件上传模块 const upload = require('../utils/upload') // 导入公告路由处理函数模块 const noticeHandler = require('../router_handler/notice')

    var router = express.Router()

    router.post('/upload', upload.single("img"), noticeHandler.upload)

    module.exports = router

  • router_handler文件

    /* 公告管理函数处理模块 */

    // 导入数据库操作模块 const db = require('../db/index') const {readFilePath} = require('../config')

    // 上传文件成功后的回调 exports.upload = (req, res) => { res.send({ errno: 0, data: { url: readFilePath + req.file.filename, alt: '这是一张图片', href: readFilePath + req.file.filename } }) }

  • app.js

    // 注册路由模块 app.use('/user', userRouter) app.use('/application', applicationRouter) app.use('/notice', noticeRouter)

  • 测试