express + multer 文件上传入门
写在前面的
在web开发中,我们经常会遇到图片上传的功能,接下来我们就在express4.15.0框架中利用multer1.3.0模块来实现图片上传
开始敲代码
首先利用express-generator express框架生成器生成我们的项目
这里我们采用ejs模板引擎(因为我只会这个)
express -e uploads
创建好之后,目录结构如下图所示:
然后开始安装依赖并且运行
cd uploads
cnpm install
npm start
用谷歌浏览器打开http://localhost:3000,出现下图。至此,我们的express框架已经搭建完成
接下来,安装multe中间件,并且将依赖写入package.json
cnpm install multer --save
打开package.json,我们惊奇的发现多了一行
至此,我们终于搭建好环境了,正式开始编程
我们首先写一个表单提交路由
在routes文件下的index.js中,添加一个路由
router.get('/upload', function(req, res, next) {
res.render('upload', { title: '图片上传' });
});
接下来写一个相对应的表单提交页面
注意!提交方式必须是post,同时添加属性enctype="multipart/form-data"
要不然,http协议的头信息是不对的,关于这点,可以参考这里
<!DOCTYPE html>
<html>
<head>
<title><%= title %></title>
<link rel='stylesheet' href='/stylesheets/style.css' />
</head>
<body>
<h1><%= title %></h1>
<form action="doup" method="post" enctype="multipart/form-data">
<p>
<label for="img">图片上传:</label>
<input type="file" value="选择图片" id="img" name="image">
</p>
<p>
<input type="submit" value="提交">
</p>
</form>
</body>
</html>
运行程序,结果如下图
很幸运,程序正常运行
接下来,我们需要修改app.js,引入multer模块
var multer = require('multer');
在相应的位置上添加下面语句
//将上传上来的image文件放到项目的tmp文件夹下面
//!!!特别注意:这句话必须放在
//app.use('/', index);
//app.use('/users', users);
//这两句的前面,否则后面会失败的
app.use(multer({dest: './tmp/'}).array('image'));
运行程序之后,我们又可以惊奇的发现项目中多了一个文件夹
在浏览器上传文件后,打开tmp文件夹,发现里面的多了一个文件,名字是一串乱七八糟的东西,
很懊恼,这明明不是我上传的jpg图片呀
不要着急,这里我们把文件的名字改一下
名字随便写,后缀是你上传的后缀就可以,我上传的是jpg格式的图片,
很神奇的事情发生了
我们发现这不就是我们上传的文件吗,可是难道我们必须手动更改吗
不要忘了nodejs很轻易就可以对本地文件进行操作
利用fs模块可以轻松实现这点
在routers中的index.js我们接着更改
引入fs模块
var fs = require('fs');
添加post提交路由
router.post('/doup', function (req,res,next){
var files = req.files;
var oldPath = files[0].destination + files[0].filename;
var newPath = './public/uploads/' + files[0].originalname;
console.log(newPath);
fs.rename(oldPath, newPath, function (err) {
if (err) {
throw err;
}
res.send('success');
});
})
运行程序,上传图片,发现图片正常上传
至此,我们的上传图片已经大功告成!
express + multer 文件上传入门的更多相关文章
- Express multer 文件上传
npm multer 文件上传 Express app 范本就不写了,仅记录一下上传部分的代码. const fs = require('fs'); const express = require(' ...
- node+express实现文件上传功能
在进行node web开发时,我们可能经常遇到上传文件的问题,这一块如果我们没有经验,可能会遇到很多坑,下面我将跟大家分享一下,实现文件上传的一些方式. 一.node+express文件上传的常用方式 ...
- node express formidable 文件上传后修改文件名
//我是用php的思想来学习nodejs var express = require('express'); var router = express.Router(); var fs = requi ...
- Vue+axios+Node+express实现文件上传(用户头像上传)
Vue 页面的代码 <label for='my_file' class="theme-color"> <mu-icon left value="bac ...
- koa2的文件上传
使用koa2搭建文件上传服务,后端代码 const os = require('os'); const path = require('path'); const koaBody = require( ...
- Nodejs进阶:基于express+multer的文件上传
关于作者 程序猿小卡,前腾讯IMWEB团队成员,阿里云栖社区专家博主.欢迎加入 Express前端交流群(197339705). 正在填坑:<Nodejs学习笔记> / <Expre ...
- node.js中 express + multer 处理文件上传
multer中间件,可以很方便的结合express处理用户表单上传的文件. 一.安装multer npm install multer 二.处理单个文件上传 const express = requi ...
- express文件上传中间件Multer详解
express文件上传中间件Multer详解 转载自:https://www.cnblogs.com/chengdabelief/p/6580874.html Express默认并不处理HTTP请 ...
- Express文件上传之Multer
Express文件上传之Multer Multer是一个nodejs中间件,用来处理http提交multipart/form-data,也就是文件上传.它是在busboy的基础上开发的. 在我看来,M ...
随机推荐
- 关于getElementsByTagName的遍历顺序
关于getElementsByTagName的遍历顺序是怎么样的呢? getElementsByTagName的遍历顺序是从HTML的页面从上到下遍历还是按照标签的嵌套顺序层层遍历的呢? 来做个小小的 ...
- <Android Framework 之路>Android5.1 Camera Framework(三)
上一次讲解了一下startPreview过程,主要是为了画出一条大致的从上到下的线条,今天我们看一下Camera在Framework的sendCommand和dataCallback,这部分属于衔接过 ...
- Android和Html的简单交互
---恢复内容开始--- 1.通过WebView加载Html界面.在android studio中html放在assets中. 但是默认的并不存在这个文件夹,创建过程是 2.创建后简单实现下,js调用 ...
- Cacti部署之配置防火墙
因为SNMP协议通信会使用udp 的161端口和tcp的199端口,因此需要在防火墙上将其开启 开启入站端口 保存数据或者重启服务 测试SNMP工具连接是否可获取信息 注意:要能使用s ...
- JS 限制input框的输入字数,并提示可输入字数
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- cache(缓存)的作用
cache的作用: 连接文件.内存与应用,为信息流在三者之间流动提供通道: 存储管理:对外与对内: 存取效率: 多线程: 一次存储:分批存储? 系统的缓存控制机制(虚拟内存)使用分段分页与命中机制. ...
- HDU 1028 Ignatius and the Princess III(母函数整数拆分)
链接:传送门 题意:一个数n有多少种拆分方法 思路:典型母函数在整数拆分上的应用 /********************************************************** ...
- splay 文艺平衡树 (数据结构)
题目大意:略 splay维护区间翻转裸题,为了减少不必要的麻烦,多插入两个点,分别是0和n+1 每次找区间的第K个值,就在splay上二分即可 顺便学了一下splay的完美建树,而且splay有一些小 ...
- [JZOJ]100047. 【NOIP2017提高A组模拟7.14】基因变异
21 世纪是生物学的世纪,以遗传与进化为代表的现代生物理论越来越多的 进入了我们的视野. 如同大家所熟知的,基因是遗传因子,它记录了生命的基本构造和性能. 因此生物进化与基因的变异息息相关,考察基因变 ...
- STM32 Cubemx 输出可调频率与占空比的PWM
这里就不对STM32的PWM进行讲解了,想要了解的可以百度一下,这里主要说怎么实现. 1.建立工程,我选的是STM32F103zet6芯片,选择定时器的PWM功能 2.配置时钟,我这里配的是内部时钟, ...