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 相关文章推荐
JQuery的ajax获取数据后的处理总结(html,xml,json)
Jul 14 Javascript
如何用JavaScript动态呼叫函数(两种方式)
May 03 Javascript
jquery遍历之parent()和parents()的区别及parentsUntil()方法详解
Dec 02 Javascript
jQuery中prevAll()方法用法实例
Jan 08 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
Jan 08 Javascript
BootStrap中的Fontawesome 图标
May 25 Javascript
使用Node.js实现简易MVC框架的方法
Aug 07 Javascript
js异步编程小技巧详解
Aug 14 Javascript
使用Dropzone.js上传的示例代码
Oct 10 Javascript
本地搭建微信小程序服务器的实现方法
Oct 27 Javascript
解决vue的变量在settimeout内部效果失效的问题
Aug 30 Javascript
react ant Design手动设置表单的值操作
Oct 31 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
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
PHP Opcache安装和配置方法介绍
2015/05/28 PHP
thinkphp框架page类与bootstrap分页(美化)
2017/06/25 PHP
使用laravel的migrate创建数据表的方法
2019/09/30 PHP
参考:关于Javascript中实现暂停的几篇文章
2007/03/04 Javascript
通过判断JavaScript的版本实现执行不同的代码
2010/05/11 Javascript
firefox事件处理之自动查找event的函数(用于onclick=foo())
2010/08/05 Javascript
iframe 异步加载技术及性能分析
2011/07/19 Javascript
jquery 利用show和hidden实现级联菜单示例代码
2013/08/09 Javascript
js中的数组Array定义与sort方法使用示例
2013/08/29 Javascript
javascript中几个容易混淆的概念总结
2015/04/14 Javascript
14款经典网页图片和文字特效的jQuery插件-前端开发必备
2015/08/25 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
2016/05/31 Javascript
angularjs中ng-attr的用法详解
2016/12/31 Javascript
Vue开发中整合axios的文件整理
2017/04/29 Javascript
vue事件修饰符和按键修饰符用法总结
2017/07/25 Javascript
vue强制刷新组件的方法示例
2019/02/28 Javascript
基于node简单实现RSA加解密的方法步骤
2019/03/21 Javascript
js打开word文档预览操作示例【不是下载】
2019/05/23 Javascript
webpack3.0升级4.0的方法步骤
2020/04/02 Javascript
JavaScript forEach中return失效问题解决方案
2020/06/01 Javascript
详解Vue中的watch和computed
2020/11/09 Javascript
[51:15]完美世界DOTA2联赛PWL S2 PXG vs Magma 第一场 11.21
2020/11/24 DOTA
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
Django接收自定义http header过程详解
2019/08/23 Python
python将邻接矩阵输出成图的实现
2019/11/21 Python
在pycharm中关掉ipython console/PyDev操作
2020/06/09 Python
Python requests接口测试实现代码
2020/09/08 Python
HTML5全屏(Fullscreen)API详细介绍
2015/04/24 HTML / CSS
2014年冬季防火方案
2014/05/21 职场文书
项目经理任命书内容
2014/06/06 职场文书
优秀教师先进事迹材料
2014/12/15 职场文书
医生个人年度总结
2015/02/28 职场文书
手术室消毒隔离制度
2015/08/05 职场文书
团委副书记工作总结
2015/08/14 职场文书
浅谈Redis缓冲区机制
2022/06/05 Redis