app.js
var express = require("express");
var app = express();
var router = require("./router/router.js");
app.set("view engine",'ejs');
app.post("/dosetAvatar",router.dosetAvatar);
app.listen('3000');
router.js
var formidable = require("formidable");
var path = require("path");
var fs = require("fs");
//上传图片
exports.dosetAvatar = function(req,res,next){
//必须保证登陆
if (req.session.login != "1") {
res.end("非法闯入,这个页面要求登陆!");
return;
}
//可以通过该方法创建一个form表单
var form = new formidable.IncomingForm();
//设置上传的文件的路径 临时文件存放路径 默认上传的临时文件存放的位置为os.tmpDir();
form.uploadDir = path.normalize(__dirname + "/../avatar");
//maxFieldsSize属性限制了所有字段所占的字节数。如果超过了该字节数,将会报错。默认的字节数为2MB
form.maxFileSize = 2 * 1024 * 1024;//最大尺寸不超过2M
form.multiples = false;//是否上传多张
form.parse(req, function (err, fields, files) {
// console.log(files);
var oldpath = files.touxiang.path; //上传默认路径 touxiang是input file的name
var newpath = path.normalize(__dirname + "/../avatar") + "/" + req.session.username + ".jpg"; //设置上传后的图片新路径
fs.rename(oldpath, newpath, function (err) {//重新设置图片的名字
if (err) {
res.send("失败");
return;
}
req.session.avatar = req.session.username + ".jpg";
//跳转到切的业务
res.redirect("/imgcut");
});
});
// res.send("上传")
}
dosetAvatar.ejs
DOCTYPE html
>
<
html
lang=
"en"
>
<
head
>
<
meta
charset=
"UTF-8"
>
<
meta
name=
"viewport"
content=
"width=device-width, initial-scale=1.0"
>
<
meta
http-equiv=
"X-UA-Compatible"
content=
"ie=edge"
>
<
title
>Document
title
>
<
link
href=
"/css/bootstrap.min.css"
rel=
"stylesheet"
>
<
link
href=
"/css/jumbotron.css"
rel=
"stylesheet"
>
head
>
<
body
>
<
h1
>更改头像
h1
>
<% include header.ejs %>
<
div
class=
"jumbotron"
>
<
div
class=
"container"
>
<
form
class=
"form-horizontal"
enctype=
"multipart/form-data"
action=
'/dosetAvatar'
method=
'post'
>
<
div
class=
"form-group"
>
<
label
for=
"username"
class=
"col-sm-2 control-label"
>请改头像
label
>
<
div
class=
"col-sm-10"
>
<
input
type=
"file"
class=
"form-control"
id=
"touxiang"
name=
'touxiang'
placeholder=
"头像"
>
div
>
div
>
<
div
class=
"form-group"
>
<
div
class=
"col-sm-offset-2 col-sm-10"
>
<
button
type=
"submit"
id=
'upTo'
class=
"btn btn-default"
>上传
button
>
div
>
div
>
form
>
<
div
class=
"alert alert-danger"
id=
'err'
style=
'display:none;'
role=
"alert"
>
用户名被占用,请更换
div
>
div
>
div
>
<
script
src=
"/js/jquery-1.11.3.min.js"
>
<
/
script
>
<
script
src=
"/js/bootstrap.min.js"
>
<
/
script
>
<
script
>
//获取焦点的时候隐藏
<
/
script
>
body
>
html
>
path: node中直接引用不用下载,path
模块提供了一些工具函数,用于处理文件与目录的路径,api
http://nodejs.cn/api/path.html
fs:直接引用 文件 I/O 是对标准 POSIX 函数的简单封装。 通过 require('fs')
使用该模块。 所有的方法都有异步和同步的形式。
http://nodejs.cn/api/fs.html
formidable: 需要用npm install formidable
- formidable模块实现了上传和编码图片和视频。它支持GB级上传数据处理,支持多种客户端数据提交。有极高的测试覆盖率,非常适合在生产环境中使用。
https://mp.csdn.net/postedit/80053763