XMLHttpRequest上传文件

页面结构

  <div class="container">
    <input type="file" name="doc" id="doc">
    <button type="submit" id="submit">提交</button>
    <br />
    <!-- 显示上传的图片 -->
    <img src="" alt="" id="img">
  </div>

1、先验证是否已上传文件

2、给FormData添加数据

3、发起请求

      var doc = document.querySelector('#doc')
      var subbtn = document.querySelector('#submit')

      subbtn.addEventListener('click', function (e) {
        // 获取上传的文件,数组
        let filedata = doc.files

        //先判断是否已经上传文件
        if (filedata.length <= 0) {
          return alert('请上传文件')
        }

        //通过FormData可以获取表单数据,也可以通过append添加数据,最后把FormData实例对象直接                                                上传发送请求
        let fd = new FormData()
        fd.append('img', filedata[0])

        
        const xhr = new XMLHttpRequest()
        xhr.open('POST', 'http://www.liulongbin.top:3006/api/upload/avatar')
        xhr.send(fd)

        xhr.onreadystatechange = function () {
          if (xhr.readyState === 4 && xhr.status === 200) {
            console.log('上传成功');

         //接收返回的结果并展示出来
            var data = JSON.parse(xhr.responseText)
            if (data.status === 200) {
              document.querySelector('#img').src = 'http://www.liulongbin.top:3006' + data.url
            }
          }
        }


      })

显示文件上传进度

e.lengthComputable 是个布尔值,表示当前上传资源是否为可计算长度。

e.loaded 已传输的字节

e.total 总需传输字节

//监听文件上传(xhr.upload)进度 
xhr.upload.onprogress = function (e) {
          if (e.lengthComputable) {
            let percentage = Math.ceil(e.loaded / e.total * 100)
            console.log(percentage + '%');
          }
        }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值