nodejs使用express上传文件[图片]

nodejs能够有不少种方式进行上传文件,此次个人是使用express实现比较简单的图片上传。css

uploads  上传图片的文件夹   public 放置静态的文件  views 渲染的页面文件node

controller/router.js 上传图片逻辑文件express

1. 新建app.js,编写相关逻辑bash

let express = require('express')
let app = express()
let router = require('./controller/router')        // 对于路由展现的逻辑我写在了controller里面
app.set("view engine", "ejs")        // 模板引擎这里使用的是ejs
app.use(express.static("./public"))        // 路由中间件,静态页面,这里放css,js之类的
app.use(express.static('./uploads'))        // 这里是上传文件的文件夹

app.get("/up", router.showUp);        // 上传图片页面
app.post("/up", router.doPost)

app.listen(3000)复制代码

2. 上传图片页面  views/up.ejs [node会自动查找views下面对应的页面] app

<form method="post" action="#" enctype="multipart/form-data">
  // 默认提交到当前页面 post方式
    <label for="exampleInputFile">选择图片</label>
    <p>尺寸小于1M</p>    <input type="file" id="exampleInputFile" name="tupian">
    <button type="submit">上传</button>
</form>复制代码

3. 编写上传图片逻辑  controller/router.jsdom

let formidable = require("formidable");
let path = require("path");
let fs = require("fs");
let sd = require("silly-datetime");

exports.showUp = (req,res) => {      
    res.render("up")
}

exports.doPost = (req,res) => {
    let form = new formidable.IncomingForm();    
    // tempup文件夹是临时文件夹,暂时存放上传的文件图片
    form.uploadDir = path.normalize(__dirname, + "/../tempup/")
    form.parse(req, (err, fields, files, next) => {
        if(err) {
            next();
            return;
        }
        let size = parseInt(files.tupian.size);     // 判断当前上传图片大小
        if(size > 1 * 1024 * 1024){            
            res.send("图片尺寸应该小于1M");            
            fs.unlink(files.tupian.path); // 超于文件规定的大小 那么对上传文件的进行删除 
            return;
        }     
        let ttt = sd.format(new Date(), 'YYYYMMDDHHmmss');
        let ran = parseInt(Math.random() * 89999 + 10000);
        let extname = path.extname(files.tupian.name);     // 用时间戳随机数加上拓展名
        let wenjianjia = fields.wenjianjia;       // 当前上传的文件夹名称        
        let oldpath = files.tupian.path;
        // 给图片更改统一格式的名称
        let newpath = path.normalize(__dirname + "/../uploads/"+ wenjianjia + "/" +ttt +ran + extname); 
        fs.rename(oldpath,newpath,(err) => {     // 将文件移动到要上传的文件夹上面            if(err){                res.send("更名失败");                return;            }            res.send("bingo");        });    })
}复制代码

4. 这样就完成了简单的图片上传。post

相关文章
相关标签/搜索