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

nodejs可以有很多种方式进行上传文件,这次我的是使用express实现比较简单的图片上传。

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

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

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

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下面对应的页面] 

<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.js

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. 这样就完成了简单的图片上传。


转载于:https://juejin.im/post/5c4ec157e51d451373284078

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值