欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

获取用户表单提交的文件并保存到本地。

最编程 2024-03-02 20:49:07
...


用户form表单往服务器上传数据,都是post方法,express解析post请求数据的中间件有body-parser和multer
body-parser解析用户注册的账号信息,无法解析上传的文件
multer解析用户post提交的文件

multer使用要引用后要创建一个multer对象里面放文件上传的存放地址,然后才是服务器请求时解析:
获取解析信息用req.files方法,

const multer = require('multer');

let objMulter = multer({dest:'./hongbinFile/upload'});//接受用户上传的文件
server.use(objMulter.any());

获取用户提交的文件并保存到本地可查看共分为这么几部:
0,用户提交数据
1,解析用户上传的文件

const multer = require('multer');

let objMulter = multer({dest:'./hongbinFile/upload'});//接受用户上传的文件
server.use(objMulter.any());

server.post('/',function(req,res){
console.log(req.files);//获取解析的数据一个数组
}

2,将获取到的不带扩展名的文件后面加上扩展名
1)path:解析文件路径信息

//解析文件路径
const path = require('path');

let str = 'D:/Hongbin/a.png';

let obj = path.parse(str);

console.log(obj);
// {
// root: 'D:/', //文件路径
// dir: 'D:/Hongbin', //路径
// base: 'a.png', //文件名
// ext: '.png', //文件的扩展名
// name: 'a' //文件的名
// }

2)用解析路径获取的文件扩展名配合multer解析的文件名filename拼成一个正确能显示的文件的格式xxx.png…

let filename = req.files[0].filename;
let ext = path.parse(req.files[0].originalname).ext;
let rename = filename + ext;

3)用fs.rename更改文件名

const fs = require('fs');

fs.rename('./a','./a.txt',function(err){
console.log(err);
})

要更改的文件的路径名必须正确

server.post('/',function(req,res){
let dir = './hongbinFile/upload/';
let filename = req.files[0].filename;
let ext = path.parse(req.files[0].originalname).ext;
let rename = filename + ext;
fs.rename(dir + filename,dir + rename,function(err){
console.log(err);
})
})

十分ok
index.html

<body>
<form action="http://localhost:8080" method="post" enctype="multipart/form-data">
<input type="file" name="f1" />
<input type="submit" value="上传"/>
</form>
<!--
enctype="multipart/form-data"
上传文件需要enctype指定类型,不指定用body-parser打印后只是文件的名
enctype属性默认值是application/x-www-form-urlencoded,还有一个基本不用不管他
-->
</body>

完整代码

const express = require('express');
const fs = require('fs');
const multer = require('multer');
const path = require('path');

let server = express();
let objMulter = multer({dest:'./hongbinFile/upload'});
server.listen(8080);

server.use(objMulter.any());

server.post('/',function(req,res){
let dir = './hongbinFile/upload/';
let filename = req.files[0].filename;
let ext = path.parse(req.files[0].originalname).ext;
let rename = filename + ext;
fs.rename(dir + filename,dir + rename,function(err){
console.log(err);
})
})

一点不多昂


推荐阅读