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打字小游戏代码
Dec 26 Javascript
IE与FF下javascript获取网页及窗口大小的区别详解
Jan 14 Javascript
jquery使整个div区域可以点击的方法
Jun 24 Javascript
浅谈JavaScript中promise的使用
Jan 11 Javascript
浅谈vue项目优化之页面的按需加载(vue+webpack)
Dec 11 Javascript
web前端页面生成exe可执行文件的方法
Feb 08 Javascript
深入理解Puppeteer的入门教程和实践
Mar 05 Javascript
微信小程序发布新版本时自动提示用户更新的方法
Jun 07 Javascript
微信小程序左滑删除实现代码实例
Sep 16 Javascript
用Golang运行JavaScript的实现示例
Nov 25 Javascript
jQuery实现回到顶部效果
Oct 19 jQuery
微信小程序自定义底部弹出框动画
Nov 18 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 调试环境(IIS+PHP+MYSQL)
2007/01/10 PHP
PHP之数组学习
2011/05/29 PHP
PHP Curl多线程原理实例详解
2013/11/06 PHP
php实现在线通讯录功能(附源码)
2016/05/13 PHP
PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析
2018/05/11 PHP
JS获取IUSR_机器名和IWAM_机器名帐号的密码
2006/12/06 Javascript
javascript 基础篇1 什么是js 建立第一个js程序
2012/03/14 Javascript
jquery如何实现在加载完iframe的内容后再进行操作
2013/09/10 Javascript
js判断字符是否是汉字的两种方法小结
2014/01/03 Javascript
JS回调函数的应用简单实例
2014/09/17 Javascript
在页面中输出当前客户端时间javascript实例代码
2016/03/02 Javascript
jquery 中toggle的2种用法详解(推荐)
2016/09/02 Javascript
Bootstrap Table使用心得总结
2016/11/29 Javascript
老生常谈Bootstrap媒体对象
2017/07/06 Javascript
node.js用fs.rename强制重命名或移动文件夹的方法
2017/12/27 Javascript
JavaScript中创建原子的方法总结
2018/08/26 Javascript
原生js实现公告滚动效果
2021/01/10 Javascript
微信小程序城市选择及搜索功能的方法
2019/03/22 Javascript
在微信小程序中使用vant的方法
2019/06/07 Javascript
ES6 Proxy实现Vue的变化检测问题
2019/06/11 Javascript
详解Python中的__getitem__方法与slice对象的切片操作
2016/06/27 Python
python 使用sys.stdin和fileinput读入标准输入的方法
2018/10/17 Python
使用python根据端口号关闭进程的方法
2018/11/06 Python
详解pyenv下使用python matplotlib模块的问题解决
2018/11/29 Python
Python多图片合并PDF的方法
2019/01/03 Python
Django应用程序入口WSGIHandler源码解析
2019/08/05 Python
美国成衣女装品牌:CHICO’S
2016/09/19 全球购物
一年级评语大全
2014/04/23 职场文书
热情服务标语
2014/10/07 职场文书
常务副总经理岗位职责
2015/02/02 职场文书
卢旺达饭店观后感
2015/06/05 职场文书
2015初中政教处工作总结
2015/07/21 职场文书
《秋思》教学反思
2016/02/23 职场文书
JavaScript实现班级抽签小程序
2021/05/19 Javascript
【海涛DOTA解说】EVE女子战队独家录像加ZSMJ神牛两连发
2022/04/01 DOTA
python中Pyqt5使用Qlabel标签播放视频
2022/04/22 Python