NodeJS + Express 文件上传功能
基于node.js express框架,借助multer或connect-multiparty中间件,我们可以实现一个文件上传功能。
下面将利用node.js express框架实现一个文件上传功能,并将上传的文件储存在项目下的tmp文件夹中:
1、使用multer中间件实现
multer中间件是用来处理multiparty/form-data
类型的表单数据,用于文件上传.
安装文件上传所需模块:npm install body-parser multer
2、文件上传项目整体结构:
在public下的index.html实现一个表单:
<form action="http://127.0.0.1:3000/fileUpload" method="POST" enctype="multipart/form-data">
<label for="file">上传文件:</label>
<input type="file" name="file" id="file"><br />
<input type="submit" value="提交">
</form>
在index.js 编写文件上传接口:
var express = require('express');
var app = express();
const fs = require('fs')
const pathLib = require('path')
// 引入body-parser中间件,用来处理post请求体body中的数据
const bodyParser = require('body-parser')
// 引入multer中间件,用于处理上传的文件数据
const multer = require('multer')
const server = app.listen(3000, function(){
console.log('express + multer 实现文件上传')
})
app.get('/', function(res, rep) {
rep.send('Hello, word!');
});
// 读取静态资源
app.use(express.static('public'))
// 通过配置multer的dest属性, 将文件储存在项目下的tmp文件中
app.use(multer({ dest: './tmp/' }).any())
// 访问index.html页面
app.get('/index.html', function(req, res){
// 将public下的index.html文件返回去
res.sendFile(__dirname + '/index.html')
})
// 文件上传接口
app.post('/fileUpload', function(req, res){
// 上传的文件在req.files中
const filename = req.files[0].path + pathLib.parse(req.files[0].originalname).ext
console.log(filename);
fs.rename(req.files[0].path, filename, function(err){
if(err){
res.send(err)
}else{
res.send('upload successfully')
}
})
})
执行node index.js
代码,在浏览器中访问http://localhost:3000/index.html打开文件上传页面,文件上传成功后,在项目下会出现tmp文件夹,里面就是上传的文件;
注意的是:文件上传接口在接收到的文件req.files[0]
的文件名和路径均不带文件后缀名