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 相关文章推荐
Exitjs获取DataView中图片文件名
Nov 26 Javascript
JS验证邮箱格式是否正确的代码
Dec 05 Javascript
使用javascript实现监控视频播放并打印日志
Jan 05 Javascript
JS显示表格内指定行html代码的方法
Mar 31 Javascript
微信小程序 JS动态修改样式的实现代码
Feb 10 Javascript
基于Bootstrap框架实现图片切换
Mar 10 Javascript
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
Apr 28 jQuery
Node.js dgram模块实现UDP通信示例代码
Sep 26 Javascript
angular json对象push到数组中的方法
Feb 27 Javascript
vue 组件中添加样式不生效的解决方法
Jul 06 Javascript
浅谈vue方法内的方法使用this的问题
Sep 15 Javascript
详解 微信小程序开发框架(MINA)
May 17 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
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
PHP中魔术变量__METHOD__与__FUNCTION__的区别
2014/09/29 PHP
使用PHP编写发红包程序
2015/07/22 PHP
PHP实现生成数据字典功能示例
2018/05/24 PHP
Laravel框架实现的使用smtp发送邮件功能示例
2019/03/12 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
2019/10/20 PHP
一个JS翻页效果
2007/07/23 Javascript
javascript 原型继承介绍
2011/08/30 Javascript
关于图片的预加载过程中隐藏未知的
2012/12/19 Javascript
JQUERY简单按钮轮换选中效果实现方法
2015/05/07 Javascript
详解javascript实现瀑布流列式布局
2016/01/29 Javascript
jQuery Easy UI中根据第一个下拉框选中的值设置第二个下拉框是否可以编辑
2016/11/29 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
Bootstrap Tooltip显示换行和左对齐的解决方案
2017/10/11 Javascript
Node.js中DNS模块学习总结
2018/02/28 Javascript
ionic grid(栅格)九宫格制作详解
2018/06/30 Javascript
详解vue-cli官方脚手架配置
2018/07/20 Javascript
在小程序中使用Echart图表的示例代码
2018/08/02 Javascript
微信小程序云开发如何使用npm安装依赖
2019/05/18 Javascript
echarts多条折线图动态分层的实现方法
2019/05/24 Javascript
微信小程序下拉框搜索功能的实现方法
2019/07/31 Javascript
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
Python 生成器,迭代,yield关键字,send()传参给yield语句操作示例
2019/10/12 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
2019/12/06 Python
Python使用QQ邮箱发送邮件实例与QQ邮箱设置详解
2020/02/18 Python
Python plt 利用subplot 实现在一张画布同时画多张图
2021/02/26 Python
为世界各地的女性设计和生产时尚服装:ROMWE
2016/09/17 全球购物
Kenneth Cole官网:纽约时尚优雅品牌
2016/11/14 全球购物
受希腊女神灵感的晚礼服、鸡尾酒礼服和婚纱:THEIA
2018/04/15 全球购物
描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
2015/03/25 面试题
爱心捐助倡议书
2014/05/19 职场文书
离婚协议书怎么写
2014/09/12 职场文书
2014年小学工作总结
2014/11/26 职场文书
超详细教你怎么升级Mysql的版本
2021/05/19 MySQL
pandas中DataFrame重置索引的几种方法
2021/05/24 Python
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL