zoukankan      html  css  js  c++  java
  • nodejs利用ajax实现网页无刷新上传图片

    nodejs利用ajax实现网页无刷新上传图片

    标签(空格分隔): nodejs


    通常情况下上传图片是要通过提交form表单来实现的,但是这又不可避免的产生了网页转。
    利用ajax技术和FormData()对象可以有效的解决这个问题

    废话不多说 直接上关键代码:

    html部分

    <div class="form-group">
       <label>File input</label>
       <input type="file" name="file" id="file">
    	<p id="result"></p>
       <img id="img" src="">
    </div>
    <button id="upload" class="btn btn-default">提交</button>
    

    这里注意input标签的 type="file"


    js部分:

    function uploadFile(){
      var file = document.getElementById("file")
      var formData = new FormData();
      formData.append('file',file.files[0]);
      $.ajax({
        url: '/upload',
        type: 'POST',
        data: formData,
        // async: false,
        cache: false,
        contentType: false,
        processData: false,
        success: function(data){
          if(200 === data.code) {
            $('#result').html("上传成功!");
            $('#img').attr('src',data.data);
          } else {
            $('#result').html("上传失败!");
          }
          console.log('imgUploader upload success');
        },
        error: function(){
          $("#result").html("与服务器通信发生错误");
        }
      });
    }
    
    function postPage() {
    		var uploada = document.getElementById('upload');
    		uploada.addEventListener("click",function () {
    			uploadFile();
    		},false);
    }
    
    window.onload = function () {
    	postPage();
    }
    

    nodejs部分:

    var storage = multer.diskStorage({
        destination: function (req, file, cb){
            cb(null, './public/images')
        },
        filename: function (req, file, cb){
            cb(null, file.originalname)
        }
    });
    var upload = multer({
        storage: storage
    });
    router.post('/upload', upload.single('file'), function (req, res, next) {
    	var url = 'http://' + req.headers.host + '/images/' + req.file.originalname
    	res.json({
    		code : 200,
    		data : url
    	})
    });
    

    multer是express官方推荐的文件上传中间件。

    • 文件上传有以下方法
      upload.single(‘file’), //适用于单文件上传。
      upload.array(‘file’,num), //适用于多文件上传,num为最多上传个数,上传文件的数量可以小于num。
      同时还提供了混合上传,比如A类文件1个,B类文件2个。官方API有详细说明。

    • file为上传字段名称,当使用form表单submit方式上传时,必须与表单上传的name属性保持一致。

    • 对上传文件大小限制,名称限制等均可在limits中加上,具体可加属性,请参考官方api。

    multer官方文档

  • 相关阅读:
    SCAU 9504 面试
    SCAU 9503 懒人选座位
    SCAU 8628 相亲
    SCAU 10691 ACM 光环
    SCAU 8626 原子量计数
    SCAU 10674 等差对
    HDU ACM 1048 The Hardest Problem Ever (水题)
    SCAU 9502 ARDF
    SCAU 10686 DeathGod不知道的事情
    SCAU 8629 热身游戏(高精度)
  • 原文地址:https://www.cnblogs.com/pspgbhu/p/5794160.html
Copyright © 2011-2022 走看看