node实现上传图片功能

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bluefish_flying/article/details/80053888



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

猜你喜欢

转载自blog.csdn.net/bluefish_flying/article/details/80053888