文件上传需要解析文件,之前我们解析数据使用body-parser,解析文件可以用multer。
body-parser: 解析post数据 form-enctype- application/x-www-form-urlencoded 默认
server.use(bodyParse.urlencode());
multer: 解析post文件 form-enctype- multipart/form-data
//dest的值用来存放上传的文件保存的路径
var obj=multer({dest: 'upload/'});
完整用法:
var obj=multer({dest: 'upload/'});
server.use(obj.any());
server.use(function (req, res){
req.files[0].originalname
req.files[0].path
});
但是这样拿到的数据req.files[0].path,是没有文件扩展名的;所以需要将其添加扩展名。
原理就是:拿到源文件的扩展名,使用file的rename方法,将其崇明名成带扩展名的文件。完整代码如下:
html:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form class="" action="http://localhost:5555/" method="post" enctype="multipart/form-data">
文件:<input type="file" name="fil" value=""><br>
<input type="submit" name="" value="上传">
</form>
</body>
</html>
js:
const express = require("express");
const bodyParser = require("body-parser");
const multer = require("multer");
const fs = require("fs");
const pathLib = require("path");
var server = express();
// const path = require("path");
//指定上传文件保存的路径
var objMulter = multer({dest:"."});
server.use(objMulter.any());
server.post('/',function(req,res){
console.log(req.files);
var fi = req.files[0];
var originalname = fi.originalname;
var newName = fi.path+pathLib.parse(originalname).ext;
fs.rename(fi.path,newName,function(err){
if(err){
res.send("上传失败");
}else{
res.send("上传成功");
}
});
});
server.listen(5555);
启动服务:node server.js
image.png
浏览器运行html文件,点击文件上传:
image.png
点击上传按钮:
html:
cmd:
image.png
文件:
image.png
网友评论