nodejs --- 上传文件并保存到磁盘
先复习下整个请求的过程
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>
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();
这个时候你会发现文件上传了,但是文件名没有扩展名
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'
// }
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();
nodejs --- 上传文件并保存到磁盘的更多相关文章
- Express下使用formidable实现POST表单上传文件并保存
Express下使用formidable实现POST表单上传文件并保存 在上一篇文章中使用formidable实现了上传文件,但没将它保存下来. 一开始,我也以为是只得到了文件的相关信息,需要用fs. ...
- nodejs 上传文件 upload
只是现在主要用nodejs做后端了,所以记录一些上传文件的使用方法. 上传文件的主要方式: 1.form上传,优点是方便,缺点是没法回调,上传后返回的数据没法处理 2.ajax上传,优点是可控制,有回 ...
- springboot 头像上传 文件流保存 文件流返回浏览器查看 区分操作系统 windows 7 or linux
//我的会员中心 头像上传接口 /*windows 调试*/ @Value("${appImg.location}") private String winPathPic; /*l ...
- thinkphp表单上传文件并将文件路径保存到数据库中
上传单个文件,此文以上传图片为例,上传效果如图所示 创建数据库upload_img,用于保存上传路径 CREATE TABLE `seminar_upload_img` ( `id` int(11) ...
- Linux下开发python django程序(设置admin后台管理上传文件和前台上传文件保存数据库)
1.项目创建相关工作参考前面 2.在models.py文件中定义数据库结构 import django.db import modelsclass RegisterUser(models.Model) ...
- app端上传文件至服务器后台,web端上传文件存储到服务器
1.android前端发送服务器请求 在spring-mvc.xml 将过滤屏蔽(如果不屏蔽 ,文件流为空) <!-- <bean id="multipartResolver&q ...
- Servlet 实现上传文件以及同时,写入xml格式文件和上传
package com.isoftstone.eply.servlet; import java.io.BufferedReader; import java.io.BufferedWriter; i ...
- java servlet上传文件并把文件内容显示在网页中
servlet3.0(JDK1.6)自带的API即可实现本地文件的上传,Servlet3.0新增了Part接口,HttpServletRequest的getPart()方法取得Part实现对象.下面我 ...
- php上传文件时出现错误:failed to open stream: Permission denied
尝试使用php写了一段小的上传程序,但是在使用的时候,在上传文件时出现这个错误,由于之前在写程序要读文件,曾经出现过这个问题,当时是因为要读的文件的权限不够,于是使用chmod 775 1.txt把文 ...
随机推荐
- [ACM_数据结构] HDU 1166 敌兵布阵 线段树 或 树状数组
#include<iostream> #include<cstdio> #include<memory.h> using namespace std; ]; //- ...
- spring boot 使用 HandlerInterceptor
# 背景 在实际项目中,接口出于安全考虑,都会有验签的计算.目前接触的项目来看基本都是时间戳+干扰因子 然后md5计算的方式.现在学习,写一个简单demo, 其实如果不引入拦截器的话,验签计算全部在c ...
- 排序算法之快速排序(Quicksort)解析
一.快速排序算法的优点,为什么称之为快排? Quicksort是对归并排序算法的优化,继承了归并排序的优点,同样应用了分治思想. 所谓的分治思想就是对一个问题“分而治之”,用分治思想来解决问题需要两个 ...
- .net core AOP之Filter
当我们进行项目开发时,往往在开发过程中需要临时加入一些常用功能性代码,如身份验证.日志记录.异常获取等功能.如果每个方法中都加入这些功能性代码的话,无疑使项目显得过于臃肿,代码繁杂.这时候就要加入过滤 ...
- 使用FFMpeg命令行录屏推rtmp流
最近在做局域网内屏幕分享方面的东西,要把录制一台设备的屏幕然后实时推送给内网的一个或多个用户. 做了很多实验,效果还没有达到要求,这里分享一下推rtmp流的实验. 实验使用到的各种工具:FFmpeg. ...
- 2017 NAIPC A:Pieces of Parentheses
my team solve the problem in the contest with similar ideathis is a more deep analysis The main idea ...
- Weekly Contest 128
1012. Complement of Base 10 Integer Every non-negative integer N has a binary representation. For e ...
- python中实现三目运算
python中没有其他语言中的三元表达式,不过有类似的实现方法 如: a = 1 b =2 k = 3 if a>b else 4 上面的代码就是python中实现三目运算的一个小demo, 如 ...
- CF 798B 渣渣题
题目链接:http://codeforces.com/contest/798/problem/B 此题是我打河工大校赛前一晚熬夜打CF时硬肛过去的B题,今天补题时,偶然看到dalao的代码,ORZ,s ...
- [JavaScript] 时间戳格式化为yyyy-MM-dd日期
function formateDate(timestamp){ var date = new Date(timestamp); var y = 1900+date.getYear(); var m ...