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 相关文章推荐
javascript处理表单示例(javascript提交表单)
Apr 28 Javascript
jQuery中die()方法用法实例
Jan 19 Javascript
jquery拖拽效果完整实例(附demo源码下载)
Jan 14 Javascript
原生javascript实现解析XML文档与字符串
Mar 01 Javascript
JavaScript希尔排序、快速排序、归并排序算法
May 08 Javascript
jQuery Mobile和HTML5开发App推广注册页
Nov 07 Javascript
jQuery实用密码强度检测
Mar 02 Javascript
Js利用console计算代码运行时间的方法示例
Sep 24 Javascript
JavaScript EventEmitter 背后的秘密 完整版
Mar 29 Javascript
微信小程序时间戳转日期的详解
Apr 30 Javascript
JS代码实现页面切换效果
Jan 10 Javascript
如何在JavaScript中使用localStorage详情
Feb 04 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
smarty基础之拼接字符串的详解
2013/06/18 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
编写针对IE的JS代码两种编写方法
2013/01/30 Javascript
jquery 单引号和双引号的区别及使用注意
2013/07/31 Javascript
JS将滑动门改为选项卡(需鼠标点击)的实现方法
2015/09/27 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
2017/08/14 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
实例详解vue.js浅度监听和深度监听及watch用法
2018/08/16 Javascript
JS调用安卓手机摄像头扫描二维码
2018/10/16 Javascript
一个小时快速搭建微信小程序的方法步骤
2019/04/15 Javascript
Vue使用Proxy代理后仍无法生效的解决
2020/11/13 Javascript
Python学习资料
2007/02/08 Python
使用Python脚本对Linux服务器进行监控的教程
2015/04/02 Python
Python中用于去除空格的三个函数的使用小结
2015/04/07 Python
浅析Python的Django框架中的Memcached
2015/07/23 Python
python中利用Future对象回调别的函数示例代码
2017/09/07 Python
python遍历小写英文字母的方法
2019/01/02 Python
python 调用钉钉机器人的方法
2019/02/20 Python
python flask框架实现传数据到js的方法分析
2019/06/11 Python
python3+PyQt5 数据库编程--增删改实例
2019/06/17 Python
python找出因数与质因数的方法
2019/07/25 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
2020/01/21 Python
Python实现病毒仿真器的方法示例(附demo)
2020/02/19 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
2020/03/23 Python
python制作一个简单的gui 数据库查询界面
2020/11/19 Python
向全球直邮输送天然健康产品:iHerb.com
2020/05/03 全球购物
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
中文专业毕业生自荐信
2013/10/28 职场文书
党员干部承诺书范文
2014/03/25 职场文书
高中课前三分钟演讲稿
2014/09/13 职场文书
2014年电厂工作总结
2014/12/04 职场文书
2015元旦联欢晚会结束语
2014/12/14 职场文书
2016学校元旦晚会经典开场白台词
2015/12/03 职场文书
MySQL update set 和 and的区别
2021/05/08 MySQL