express学习笔记8 - 文件上传 下载以及预览

一、上传

1、 安装multer (任意选其中一种)

复制代码
yarn add multer --S
npm install multer --S

2、新建配置文件(utils/multerConfig)

复制代码
const multer  = require('multer');
const mkdirp = require('mkdirp');
// const sd = require('silly-datetime');
const path = require('path');

const storage = multer.diskStorage({
  //配置上传的目录
  destination: async (req, file, cb) => {
      // 生成格式化日期
      // let date = sd.format(new Date(), 'YYYYMMDD');
      // let date = '1dfrswdesw'
      let date = String((new Date()).getTime())
      // 获取目录路径
      let dir = path.join('static/uploads', date)
      // 生成目录,异步改同步
      await mkdirp(dir);
      cb(null, dir);
  },
  //修改上传后的文件名
  filename: function (req, file, cb) {
      //1、获取后缀名
      let extname = path.extname(file.originalname);
      //2、根据时间戳生成文件名
      cb(null, Date.now()+extname)
  }
})

// 4. 为 multer 添加配置
const multerConfig = multer({
  storage: storage,
  limits: { fileSize: 2097152 } // 2M
})

module.exports = multerConfig

3、新建文件(router/upload)

复制代码
const express = require("express");
const router = express.Router();
const multer  = require('multer')
const upload = multer({ dest: 'uploads/' })
const {debug} =require('../utils/constant')
const multerConfig = require('../utils/multerConfig')


// const boom= require('boom')
// const uuid = require('node-uuid');
// const jwt = require('jsonwebtoken') //用来生成token
const Result = require('../models/Result') //封住返回结果类
// express-validator 是一个功能强大的表单验证器,它是 validator.js 的中间件
// const { body, validationResult } = require('express-validator')
// https://blog.51cto.com/coderbin/6085770
router.post('/upload',multerConfig.single('file'),(req,res,next)=>{
    debug && console.log('/file/upload', req.body)
    console.log(req.file);
    new Result(req.file).success(res)
    // listHouseInfo(req.body).then(list=>{
    //     debug && console.log(list)
    //     new Result(list).success(res)
    //   }).catch(err=>{ 
    //     next(boom.badImplementation(err))
    //   })
})
module.exports = router;

4、用postman进行测试 (如果返回下面的内容 说明上传成功)

在目录里面可以看到刚刚上传的那张图片

二、下载

1、在router/upload里面加入下面代码 (我写了一个静态的文件做测试,后期你可以通过传参数把它变成动态的)

复制代码
// 下载
router.get('/download',(req,res,next)=>{
    
    debug && console.log('/file/download', req.body)
    console.log(req.file);
    let filePath = path.join(__dirname,'../static/uploads/1692155801705/1692155801706.png' )
    console.log(__dirname)
    res.download(filePath)
    // new Result(req.file).success(res)
    // listHouseInfo(req.body).then(list=>{
    //     debug && console.log(list)
    //     new Result(list).success(res)
    //   }).catch(err=>{ 
    //     next(boom.badImplementation(err))
    //   })
})

然后在postman做测试(返回出现图片说明成功了),你也可以直接在浏览器做测试

三、文件预览

在app.js加入下面代码

复制代码
const path = require('path');
//开放upload静态文件
app.use(express.static(path.join(__dirname, 'static')));

显示结果:

如果不显示,看看你的文件的文件夹名称是啥

相关推荐
沐矢羽14 分钟前
Tomcat PUT方法任意写文件漏洞学习
学习·tomcat
好奇龙猫15 分钟前
日语学习-日语知识点小记-进阶-JLPT-N1阶段蓝宝书,共120语法(10):91-100语法+考え方13
学习
向阳花开_miemie1 小时前
Android音频学习(十八)——混音流程
学习·音视频
工大一只猿1 小时前
51单片机学习
嵌入式硬件·学习·51单片机
c0d1ng1 小时前
量子计算学习(第十四周周报)
学习·量子计算
Hello_Embed8 小时前
STM32HAL 快速入门(二十):UART 中断改进 —— 环形缓冲区解决数据丢失
笔记·stm32·单片机·学习·嵌入式软件
咸甜适中9 小时前
rust语言 (1.88) 学习笔记:客户端和服务器端同在一个项目中
笔记·学习·rust
Grassto9 小时前
RAG 从入门到放弃?丐版 demo 实战笔记(go+python)
笔记
Magnetic_h10 小时前
【iOS】设计模式复习
笔记·学习·ios·设计模式·objective-c·cocoa
研梦非凡10 小时前
ICCV 2025|从粗到细:用于高效3D高斯溅射的可学习离散小波变换
人工智能·深度学习·学习·3d