首页 技术 正文
技术 2022年11月15日
0 收藏 624 点赞 3,240 浏览 4451 个字

先复习下整个请求的过程

const express = require('express');
const static = require('express-static');
const cookieParser = require('cookie-parser');
const cookieSession = require('cookie-session');
const bodyParser = require('body-parser');
const multer = require('multer');
const ejs = require('ejs');
const jade = require('jade');const server = express();server.listen();// 解析cookie
server.use(cookieParser('dfadfasdfa'));// 解析session
let arr = [];
for(let i = ; i < ; i++) {
arr.push('key_' + Math.random());
}server.use(cookieSession({name: 'jason_name', keys: arr, maxAge: **}));// post数据
server.use(bodyParser.urlencoded({extended: false}));
server.use(multer({dest: './www/upload'}).any());// 用户请求
server.use('/', (req, res, next) => {
console.log(req.query, req.body, req.files, req.cookie, req.session);
});server.use(static('./www'));

测试下能不能上传

const express = require('express');
const bodyParser = require('body-parser');
const multer = require('multer');
// fs 可以用来添加上传文件的扩展名(重命名)
const fs = require('fs');
const pathLib = require('path');const server = express();// 创建一个上传文件对象
// let objMulter = multer({dest: './www/upload'});server.use(bodyParser.urlencoded({extended: false}));
// server.use(objMulter.any());server.post('/', (req, res) => {
console.log('req.body==>',req.body);
// 当请求是 enctype=application/x-www-form-urlencoded
// req.body==> { f1: 'mmexport1485905379121.jpg' }
// 当请求是 multertype/form-type
// req.body==> {}
// console.log('req.files==>', req.files);
});server.listen();

上传的表单文件

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="http://localhost:8999" method="post" enctype="application/x-www-form-urlencoded">
<!-- <form action="http://localhost:8999" method="post" enctype="multipart/form-data"> -->
<!-- <form action="http://localhost:8999" method="post" enctype="text/plain"> -->
文件: <input type="file" name="f1"> <br/>
<input type="submit" value="上传">
</form>
</body>
</html>

这是因为body-parser 只能处理application/x-www-form-urlencoded 文件上传 需要使用 multer 模块 用来处理 multipart/form-data

const express = require('express');
const bodyParser = require('body-parser');
const multer = require('multer');
// fs 可以用来添加上传文件的扩展名(重命名)
const fs = require('fs');
const pathLib = require('path');const server = express();// 创建一个上传文件对象
let objMulter = multer({dest: './www/upload'});// server.use(bodyParser.urlencoded({extended: false}));
server.use(objMulter.any());server.post('/', (req, res) => {
// console.log('req.body==>',req.body);
console.log('req.files==>', req.files);
// req.files==> [ { fieldname: 'f1',
// originalname: 'IMG_20170125_212945.jpg',
// encoding: '7bit',
// mimetype: 'image/jpeg',
// destination: './www/upload',
// filename: 'fa0b73da8bdbcb36e9480e9869c0a2b7',
// path: 'www\\upload\\fa0b73da8bdbcb36e9480e9869c0a2b7',
// size: 226929 } ]});server.listen();

这个时候你会发现文件上传了,但是文件名没有扩展名

fs中重名的函数rename fs.rename(‘a.txt’, ‘b.txt’, (err) => {     console.log(err);}); 获取扩展名的插件  path  可以小小的测试下 这个node中的path插件

const path = require('path');let str = 'c:\\wamp\\www\\a.html';let obj = path.parse(str);console.log(obj);// {
// root: 'c:\\',
// dir: 'c:\\wamp\\www',
// base: 'a.html',
// ext: '.html',
// name: 'a'
// }

// base   文件名部分// ext     扩展名部分// dir      文件路径(目录)// name  文件名(不包含扩展名) 然后讲path插件添加进文件

const express = require('express');
const bodyParser = require('body-parser');
const multer = require('multer');
// fs 可以用来添加上传文件的扩展名(重命名)
const fs = require('fs');
const pathLib = require('path');const server = express();// 创建一个上传文件对象
let objMulter = multer({dest: './www/upload'});// server.use(bodyParser.urlencoded({extended: false}));
server.use(objMulter.any());server.post('/', (req, res) => {
// console.log('req.body==>',req.body);
console.log('req.files==>', req.files);
// req.files==> [ { fieldname: 'f1',
// originalname: 'IMG_20170125_212945.jpg',
// encoding: '7bit',
// mimetype: 'image/jpeg',
// destination: './www/upload',
// filename: 'fa0b73da8bdbcb36e9480e9869c0a2b7',
// path: 'www\\upload\\fa0b73da8bdbcb36e9480e9869c0a2b7',
// size: 226929 } ]
//1.获取原始的扩展名 2.重命名临时文件
let newName = req.files[].path + pathLib.parse(req.files[].originalname).ext
fs.rename(req.files[].path, newName, (err) => {
if(err) {
console.log('重命名失败');
}else {
console.log('命名成功');
}
});
});// req.files==> [ { fieldname: 'f1',
// originalname: 'IMG_20170125_212945.jpg',
// encoding: '7bit',
// mimetype: 'image/jpeg',
// destination: './www/upload',
// filename: 'bb031c31a1016648703a0d54cc93f674',
// path: 'www\\upload\\bb031c31a1016648703a0d54cc93f674',
// size: 226929 } ]
// 命名成功server.listen();

 到此,文件成功的保存到磁盘中,并且大小一致 总结:      body-parser      解析post数据     application/x-www-form-urlencoded     multer               解析post文件      multipart/form-data let  obj = multer({dest: ‘上传路径’}); server.use(obj.any()); server.use( (req, res) => {     req.files[0].originalname     req.files[0].path}); fs.rename(老名字, 新名字, (err) => { }); 

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,085
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,560
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,409
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,182
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,819
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,902