js上传二进制图片

需求:因为公司图片上传接口和手机客户端上传接口用的是同一个,所以前端要和手机端一样使用二进制的方式进行图片上传。在进行二进制图片上传的时候遇到了几个坑:
第一个是如果后台定义的请求类型是contentType:application/octet-stream的二进制类型就不能用jquery封装的ajax进行请求,否则会报错,建议用原生ajax请求。
第二个是你需要用法哦两个H5的方法readAsArrayBuffer和Blob,前者是将文件读取并缓存至二进制的缓存区后者是将文件读取并存放至Blob对象中且必须以数组的形式。
代码:

$('body').on('change', '#uploadImg', function () {//上传图片
    let file = this.files[0];
    let reader = new FileReader();
    reader.readAsArrayBuffer(file);//安字节读取文件并存储至二进制缓存区
    reader.onload = function (e) {
      let result = e.target.result;
      // let blob = new Blob([result]);//存储二进制数据
      // let url = URL.createObjectURL(blob);//生成本地图片地址用于图片预览
      let request = new XMLHttpRequest();
      request.onreadystatechange = function () {
        if (request.readyState === 4) {
          if (request.status === 200) {
            parent.modal.operModal({
              info: '成功',
              className: 'H5Product'
            })
            $('.imgWrap').attr('data-url', address);
            $('.imgWrap').html(`<img src="${address}">`);
          } else {
            parent.modal.operModal({
              info: '失败',
              className: 'H5Product'
            })
          }
        } else {
          console.log('others')
        }
      }
      request.open('PUT', host);//host是阿里云返回的图片存储地址,即你要请求的地址
      request.setRequestHeader('Content-Type', 'application/octet-stream');
      request.send(result);
    }
  })

另外,这是我的微信:ChenYuJ,前端新人一枚,希望有些共同前进的朋友。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值