node+multer实现图片上传的示例代码


Posted in Javascript onFebruary 18, 2020

最近在学习node实现一个后台管理系统,用到了图片上传,有一些小问题记录一下~

直接上代码,问题都记录在注释里~

const express = require('express');
const path = require('path');
const multer = require('multer');
const app = new express();

// 设置静态目录 第一个参数为虚拟的文件前缀,实际上文件系统中不存在
// 可以用public做为前缀来加载static文件夹下的文件了
app.use('/public', express.static(path.join(__dirname, './static')));

// 根据当前文件目录指定文件夹
const dir = path.resolve(__dirname, '../static/img');
// 图片大小限制KB
const SIZELIMIT = 500000;

const storage = multer.diskStorage({
  // 指定文件路径
  destination: function(req, file, cb) {
    // !!!相对路径时以node执行目录为基准,避免权限问题,该目录最好已存在*
    // cb(null, './uploads');
    cb(null, dir);
  },
  // 指定文件名
  filename: function(req, file, cb) {
    // filedname指向参数key值
    cb(null, Date.now() + '-' + file.originalname);
  }
});

const upload = multer({
  storage: storage
});

app.post('/upload', upload.single('file'), (req, res) => {
  // 即将上传图片的key值 form-data对象{key: value}
  // 检查是否有文件待上传
  if (req.file === undefined) {
    return res.send({
      errno: -1,
      msg: 'no file'
    });
  }
  const {size, mimetype, filename} = req.file;
  const types = ['jpg', 'jpeg', 'png', 'gif'];
  const tmpTypes = mimetype.split('/')[1];
  // 检查文件大小
  if (size >= SIZELIMIT) {
    return res.send({
      errno: -1,
      msg: 'file is too large'
    });
  }
  // 检查文件类型
  else if (types.indexOf(tmpTypes) < 0) {
    return res.send({
      errno: -1,
      msg: 'not accepted filetype'
    });
  }
  // 路径可根据设置的静态目录指定
  const url = '/public/img/' + filename;
  res.json({
    errno: 0,
    msg: 'upload success',
    url
  });
});

app.listen(3000, () => {
  console.log('service start');
});

附上文档参考链接:
express框架
path模块
multer
最后再附赠一个node自动重启工具nodemon

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery1.4后 jqDrag 拖动 不可用
Feb 06 Javascript
jquery属性选择器not has怎么写 行悬停高亮显示
Nov 13 Javascript
JavaScript类型系统之Object详解
Jan 07 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
Jul 22 Javascript
常用JS图片滚动(无缝、平滑、上下左右滚动)代码大全(推荐)
Dec 20 Javascript
BootStrap中Table隐藏后显示问题的实现代码
Aug 31 Javascript
使用Angular CLI进行Build(构建)和Serve详解
Mar 24 Javascript
vue+express 构建后台管理系统的示例代码
Jul 19 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
Oct 09 Javascript
微信小程序自定义导航栏实例代码
Apr 05 Javascript
ajax跨域访问遇到的问题及解决方案
May 23 Javascript
Javascript类型判断相关例题及解析
Aug 26 Javascript
JavaScript canvas绘制圆弧与圆形
Feb 18 #Javascript
javascript中的with语句学习笔记及用法
Feb 17 #Javascript
JS实现百度搜索框关键字推荐
Feb 17 #Javascript
js实现百度淘宝搜索功能
Feb 17 #Javascript
JavaScript使用canvas绘制随机验证码
Feb 17 #Javascript
JavaScript中this的学习笔记及用法整理
Feb 17 #Javascript
Vue 中使用 typescript的方法详解
Feb 17 #Javascript
You might like
解决dede生成静态页和动态页转换的一些问题,及火车采集入库生成动态的办法
2007/03/29 PHP
PHP chmod 函数与批量修改文件目录权限
2010/05/10 PHP
php array的学习笔记
2012/05/10 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
php模拟post上传图片实现代码
2016/06/24 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
PHP实现类似题库抽题效果
2018/08/16 PHP
jquery 图片轮换效果
2010/07/29 Javascript
jQuery实战之品牌展示列表效果
2011/04/10 Javascript
js判断字符是否是汉字的两种方法小结
2014/01/03 Javascript
jQuery简单实现上下,左右滑动的方法
2016/06/01 Javascript
JS图片左右无缝隙滚动的实现(兼容IE,Firefox 遵循W3C标准)
2016/09/23 Javascript
jQuery实现的省市联动菜单功能示例【测试可用】
2017/01/13 Javascript
详解angular2封装material2对话框组件
2017/03/03 Javascript
vuejs2.0子组件改变父组件的数据实例
2017/05/10 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
深入了解JavaScript 防抖和节流
2019/09/12 Javascript
vue实现评价星星功能
2020/06/30 Javascript
Vue 实现v-for循环的时候更改 class的样式名称
2020/07/17 Javascript
[51:30]OG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/30 DOTA
pyspark 读取csv文件创建DataFrame的两种方法
2018/06/07 Python
使用python 写一个静态服务(实战)
2019/06/28 Python
Tensorflow设置显存自适应,显存比例的操作
2020/02/03 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
2020/02/20 Python
Python socket处理client连接过程解析
2020/03/18 Python
python BeautifulSoup库的安装与使用
2020/12/17 Python
优衣库台湾官网:UNIQLO台湾
2019/02/01 全球购物
大学生应聘推荐信范文
2013/11/19 职场文书
外贸销售员求职的自我评价
2013/11/23 职场文书
本科毕业生求职自荐信
2014/02/03 职场文书
幼儿园教师岗位职责
2014/03/17 职场文书
党课培训主持词
2014/04/01 职场文书
2016年党员承诺书范文
2016/03/24 职场文书
php 防护xss,PHP的防御XSS注入的终极解决方案
2021/04/01 PHP
SQL Server数据定义——模式与基本表操作
2021/04/05 SQL Server
Redis如何使用乐观锁(CAS)保证数据一致性
2022/03/25 Redis