1. 搭建Express项目

安装express

npm install express

创建express项目,以下app-server为项目名

express app-server

cd 进入app-server目录,并运行 npm install 安装相关依赖库

注意在app-server/bin目录的www文件里指定了端口,默认为3000,我这里改为3002,避免与其他服务冲突

再输入npm start命令即运行express服务

浏览器显示如下:

2. 搭建multer文件上传服务

express默认支持jade文件,如下图app-server/views 目录所示

需要改为支持html, 安装ejs

npm install ejs --save

并修改app-server目录下的app.js文件

并增加如下语句:

//引入路由
const multerUpload = require('./routes/upload');//使用路由
app.use('/upload', multerUpload);

完整代码如下:

//引入路由
const multerUpload = require('./routes/upload');var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var ejs = require('ejs');// 使express支持html模板var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');var app = express();// view engine setup
app.set('views', path.join(__dirname, 'views'));
//app.set('view engine', 'jade');
app.engine('html', ejs.__express);
app.set('view engine', 'html');//使用路由
app.use('/upload', multerUpload);//使用路由
app.use('/upload', multerUpload);app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));app.use('/', indexRouter);
app.use('/users', usersRouter);// catch 404 and forward to error handler
app.use(function(req, res, next) {next(createError(404));
});// error handler
app.use(function(err, req, res, next) {// set locals, only providing error in developmentres.locals.message = err.message;res.locals.error = req.app.get('env') === 'development' ? err : {};// render the error pageres.status(err.status || 500);res.render('error');
});module.exports = app;

在routes目录下创建uploads.js文件,如下:

const express = require('express');
const router = express.Router();
const multer = require('multer');let upload = multer({storage: multer.diskStorage({destination: function (req, file, cb) {cb(null, './uploads/');},filename: function (req, file, cb) {var changedName = (new Date().getTime())+'-'+file.originalname;cb(null, changedName);}})
});//单个文件上传
router.post('/single', upload.single('singleFile'), (req, res) => {console.log(req.file);res.json({code: '0000',type: 'single',originalname: req.file.originalname,path: req.file.path})
});//多个文件上传
router.post('/multer', upload.array('multerFile'), (req, res) => {console.log(req.files);let fileList = [];req.files.map((elem) => {fileList.push({originalname: elem.originalname})});res.json({code: '0000',type: 'multer',fileList: fileList});
});module.exports = router;

设置完成后,删除app-server/views目录下的jada文件,并在该目录下创建html文件,如下:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title>
</head><body><!-- 单文件上传 --><div class="single"><div class="title">单个文件上传</div><input type="file" name="singleFile" id="singleFile"><button class="submit">上传</button><img src="" alt="" id="img"></div><div class="multer"><div class="title">多个文件上传</div><input type="file" name="multerFile" id="multerFile" multiple><button class="submit">上传</button></div><div class="upbefore"><div class="title">可多次点击添加按钮,并预览</div><div id="imgs"></div><input type="file" id="upgteimg" value=""/><button class="submit">上传</button></div><script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script><script>// 单文件上传$('.single .submit').on('click', function () {var fileList = $('#singleFile')[0].files;console.log(fileList);var formData = new FormData();//此处文件名必须为 singleFile ,因为后台设置仅接口此文件名formData.append('singleFile', fileList[0]);$.ajax({url: '/upload/single',type: 'post',processData: false,contentType: false,//使用multer配合ajax时无需配置multipart/form-data,multer将自动配置,手动配置将报错,boundary not founddata: formData,success: function (data) {console.log(data)$('#img').attr('src', data.path)}})});// 多文件上传$('.multer .submit').on('click', function () {var fileList = $('#multerFile')[0].files;console.log(fileList);var formData = new FormData();for (let i = 0; i < fileList.length; i++) {//此处文件名必须为 multerFile ,因为后台设置仅接口此文件名formData.append('multerFile', fileList[i]);}$.ajax({url: '/upload/multer',type: 'post',processData: false,contentType: false,data: formData,success: function (data) {console.log(data)}})});// 可多次点击添加按钮,并预览let arr = [];let src = [];$('#upgteimg').on('change', function () {let $this = $(this)let url = URL.createObjectURL($this[0].files[0]);src.push(url);arr.push($this[0].files[0]);console.log(arr);console.log(src);showImg()})function showImg() {let html = ''for (let i = 0; i < src.length; i++) {const element = src[i];html += `<img src="${element}" alt="">`}$('#imgs').html(html);}$('.upbefore .submit').on('click', function () {var formData = new FormData();for (let i = 0; i < arr.length; i++) {//此处文件名必须为 multerFile ,因为后台设置仅接口此文件名formData.append('multerFile', arr[i]);}$.ajax({url: '/upload/multer',type: 'post',processData: false,contentType: false,data: formData,success: function (data) {console.log(data)}})})</script>
</body></html>

3. 运行测试

然后npm start运行,浏览器可以看到如下:

选择文件,并上传,文件将上传到app-server/uploads目录下,如下图所示:

[NodeJS] 使用Express multer搭建文件上传服务相关推荐

  1. Nodejs基于express+multer的文件上传

    概览 图片上传是web开发中经常用到的功能,node社区在这方面也有了相对完善的支持. 常用的开源组件有multer.formidable等,借助这两个开源组件,可以轻松搞定图片上传. 本文主要讲解以 ...

  2. 关于NodeJs使用multer实现文件上传以及实现下载

    关于NodeJs使用express+multer实现文件上传以及实现下载 对于multer的了解可以在 https://www.npmjs.com/ 搜索 multer 了解具体用法. Multer ...

  3. 使用Multer进行文件上传

    File upload is a common feature that almost every website needs. We will go through step by step on ...

  4. node + multer 实现文件上传

    node + multer 实现文件上传 介绍 使用Node.js中的express框架和multer,实现文件的上传 实现 1. 前端 <el-uploadclass="upload ...

  5. 如何基于OSS和MPS,快速搭建音视频文件上传服务?

    背景 本文主要介绍如何基于OSS服务和MPS的上传SDK,快速搭建一个音视频文件上传服务. 优势 使用MPS的上传SDK上传音视频文件,具有以下优势: 增加文件列表管理功能. 增加STS Token ...

  6. 如何基于OSS和MTS,快速搭建音视频文件上传服务?

    摘要: 背景 本文主要介绍如何基于OSS服务和MTS的上传SDK,快速搭建一个音视频文件上传服务. 优势 使用MTS的上传SDK上传音视频文件,具有以下优势: 增加文件列表管理功能. 增加STS To ...

  7. [golang]简单文件上传服务

    利用net/http库及gorilla/mux库实现了一个简单的文件上传服务, 示例如下: package mainimport ("fmt""github.com/go ...

  8. Html5+NodeJS——拖拽多个文件上传到服务器

    实现多文件拖拽上传的简易Node项目,可以在github上下载,你可以先下载下来:https://github.com/Johnharvy/upLoadFiles/. 解开下载下的zip格式包,建议用 ...

  9. Node.js 高级篇(六):手把手教你使用和理解 Multer 实现文件上传,包懂 O(∩_∩)O~

    文章目录 前端 界面 代码 服务端 启动服务 文件信息 Multer 中间件 Multer(options) .single(fieldname) .array(fieldname[, maxCoun ...

最新文章

  1. P4269 [USACO18FEB]Snow Boots G
  2. 8种常被忽视的SQL错误用法,快来认领一下!
  3. /etc/bashrc和/etc/profile傻傻分不清楚?
  4. amazeui学习笔记--css(布局相关3)--辅助类Utility
  5. json文件转为excel_2分钟上手、3小时学会无代码软件开发---XML、Json处理
  6. MySQL笔记-InnoDB物理及逻辑存储结构
  7. C++中 return,break,continue的用法
  8. 017 在SecureCRT中安装rz小工具
  9. Singularity将本地SIF文件,转成sandbox
  10. Java开发笔记(一百五十一)Druid连接池的用法
  11. 项目管理计划_通用模板
  12. endnote软件X9下载安装
  13. win7显示时钟与服务器同步失败,win7时间同步出错_Win7电脑时间同步出错怎么办...
  14. sql查看服务器版本信息,怎么查看SQL Server2000的版本号
  15. 第一集 斗罗世界 第二章
  16. 高清视音监控系统的实现
  17. Javascript 合集 自己整理的收藏 记录一下(最下面有惊喜)
  18. spring加载xsd文件
  19. canvas rotate() 中心旋转的实际运用
  20. 【深度学习】YOLOv7速度精度超越其他变体,大神AB发推,网友:还得是你!|开源...

热门文章

  1. javaSE 面向对象修饰符
  2. ai前世识别_抖音AI人脸找出你的前世是谁测试入口-AI人脸找出你的前世是谁官方版入口预约v1.0-乖乖手游网...
  3. 将nginx同时作为负载均衡和Web缓存服务器
  4. 有“站德”的站长才能傲视群雄
  5. Google 代码规范 C++总结
  6. 动手学习ResNet50
  7. 对于其他小组评论的反馈
  8. 前端和后端如何选择?
  9. 中国聚氨酯市场深度调研与前景规划分析报告2022-2028年
  10. Network Manager 命令行nmcli 详细介绍