Node.js实现文件上传

1、搭建Express流程

https://blog.csdn.net/weixin_36445197/article/details/104155270

2、安装multer
cnpm install multer --save
3、设置项目端口号打印出访问ip

这一步是非必须的,默认是本机ip+3000( http://localhost:3000/)访问.
1


var ipaddress = getIPAdress();
var port = 8093;
app.listen(port, function () {
  if (ipaddress) {
      console.log('please open ' + ipaddress + ':' + port + ' in browser');
  } else {
      console.log('no networking, please open ' + ipaddress + ':' + port + ' in browser')
  }
});
/**
* 获取本机IP
* @return {[string]} [IP地址]
*/
function getIPAdress() {
  var interfaces = require('os').networkInterfaces();
  for (var devName in interfaces) {
      var iface = interfaces[devName];
      for (var i = 0; i < iface.length; i++) {
          var alias = iface[i];
          if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) {
              return alias.address;
          }
      }
  }
}
4、添加前端代码

2

<!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>
</head>
<body>

    <div class="single">
        <div class="title">单个文件上传</div>
        <input type="file" name="singleFile" id="singleFile">
        <button class="submit">上传</button>
    </div>

    <div class="multer">
        <div class="title">多个文件上传</div>
        <input type="file" name="multerFile" id="multerFile" multiple>
        <button class="submit">上传</button>
    </div>


    <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
    <script>

        $('.single .submit').on('click',function(){

            var fileList = $('#singleFile')[0].files;
            console.log(fileList);
            var formData = new FormData();

            formData.append('singleFile', fileList[0]);

            $.ajax({
                url: '/upload/single',
                type:'post',
                processData:false,
                contentType:false,
                data: formData,
                success: function(data){
                    console.log(data)
                }
            })
        });


        $('.multer .submit').on('click',function(){

            var fileList = $('#multerFile')[0].files;
            console.log(fileList);
            var formData = new FormData();

            for(let i = 0; i < fileList.length; i++){
                formData.append('multerFile', fileList[i]);
            }

            $.ajax({
                url: '/upload/multer',
                type:'post',
                processData:false,
                contentType:false,
                data: formData,
                success: function(data){
                    console.log(data)
                }
            })
        });


    </script>
</body>
</html>
5、服务端代码

3

var express = require('express');
var router = express.Router();
var fs =require('fs');
var multer = require('multer');
var path = require('path');


/* GET home page. */
router.get('/', function(req, res, next) {
  res.sendFile(path.resolve(__dirname, '../views/demo.html'));
});


var upload = multer({
  storage: multer.diskStorage({
      destination: function (req, file, cb) {
          cb(null, path.join(__dirname, './uploads/'));
      },
      filename: function (req, file, cb) {
          var changedName = (new Date().getTime())+'-'+file.originalname;
          cb(null, changedName);
      }
  })
});

//单个文件上传
router.post('/upload/single',upload.single('singleFile'), (req,res)=>{
  console.log(req.file);
  res.json({
      code: '0000',
      type:'single',
      originalname: req.file.originalname
  })
});

//多个文件上传
router.post('/upload/multer',upload.array('multerFile'), (req,res)=>{
  console.log(req.files);
  let fileList = [];
  req.files.map((elem)=>{
      fileList.push({
          originalname: elem.originalname
      })
  });
  res.json({
      code: '0000',
      type:'multer',
      fileList:fileList
  });
});

module.exports = router;

注意:destination代码中的路径使用path拼接否则可能会出现错误Error: ENOENT: no such file or directory,

var upload = multer({
  storage: multer.diskStorage({
      destination: function (req, file, cb) {
          cb(null, path.join(__dirname, './uploads/'));
      },
      filename: function (req, file, cb) {
          var changedName = (new Date().getTime())+'-'+file.originalname;
          cb(null, changedName);
      }
  })
});

文章参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值