Node+Express+Ajax实现单文件和多文件上传

1、安装依赖

在Node服务端执行命令:

cnpm i multer --save

2、单文件上传

2.1、使用表单方式提交

前台页面代码:

<h3>单文件上传-使用form</h3>
<form action="/upload/form" method="POST" enctype="multipart/form-data" >
    <input type="file" name="myfile">
    <button type="submit">上传</button>
</form>

服务器端代码:

var multer = require('multer');
var fs = require('fs');
var path = require('path');

 //使用表单上传
var upload = multer({
  storage: multer.diskStorage({
    //设置文件存储位置
     destination: function(req, file, cb) {
       let date = new Date();
       let year = date.getFullYear();
       let month = (date.getMonth() + 1).toString().padStart(2, '0');
       let day = date.getDate();
       let dir = "./public/uploads/" + year + month + day;
 
       //判断目录是否存在,没有则创建
       if (!fs.existsSync(dir)) {
         fs.mkdirSync(dir, {
           recursive: true
         });
       }
 
       //dir就是上传文件存放的目录
       cb(null, dir);
     },
     //设置文件名称
     filename: function(req, file, cb) {
       let fileName = file.fieldname + '-' + Date.now() + path.extname(file.originalname);
       //fileName就是上传文件的文件名
       cb(null, fileName);
     }
  })
})

 router.post('/upload/form',upload.single("myfile") ,function(req,res,next){
    res.json({
      file: req.file
    })
 })
2.2、使用ajax上传

前台页面代码:

<h3>单文件上传-使用ajax</h3>
<input type="file" onchange="upload(this)">

<script src="/js/jquery.js"></script>
<script>
    function upload(el){
        var files = el.files[0]
        var formDate = new FormData()
        formDate.set("myfile",files)

        $.ajax({
            url: '/upload/ajax',
            data: formDate,
            type: 'post',
            contentType: false,
            processData: false,
            success: function(res){
                console.log(res);
            }
        })
    }
</script>

服务器端代码:

// multer代码参考上面
// ......

router.post('/upload/ajax',upload.single("myfile") ,function(req,res,next){
  res.json({
    file: req.file
  })
})

3、多文件上传

3.1、使用form表单方式

前台代码:

<body>
    <h3>多文件上传-使用form</h3>
    <form action="/upload/form" method="POST" enctype="multipart/form-data" >
        <div>
            <input type="file" name="myfile">
        </div>
        <div>
            <input type="file" name="myfile">
        </div>
        <div>
            <input type="file" name="myfile">
        </div>
        <div>
            <input type="file" name="myfile">
        </div>
        <button type="submit">上传</button>
    </form>
</body>

服务端代码:

// multer代码参考上面
// ......

 router.post('/upload/form',upload.array("myfile",5) ,function(req,res,next){
    res.json({
      msg: '上传成功'
    })
 })
3.2、使用ajax方式

前台页面代码:

<h3>多文件上传-使用ajax</h3>
<div>
    <input type="file" onchange="change(this)">
</div>
<div>
    <input type="file" onchange="change(this)">
</div>
<div>
    <input type="file" onchange="change(this)">
</div>
<div>
    <input type="file" onchange="change(this)">
</div>
<button onclick="upload()">上传</button>

<script src="/js/jquery.js"></script>
<script>

    var formDate = new FormData()

    //选择文件事件
    function change(el){
        var files = el.files[0]
        formDate.append("myfile",files)
    }

    //上传
    function upload(){
        $.ajax({
            url: '/upload/ajax',
            data: formDate,
            type: 'post',
            contentType: false,
            processData: false,
            success: function(res){
                console.log(res);
            }
        })
    }
</script>

服务器端代码:

// multer代码参考上面
// ......

 router.post('/upload/ajax',upload.array("myfile",5) ,function(req,res,next){
  res.json({
    msg: '上传成功'
  })
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃囍囍丸子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值