用H5上传文件

//1,第一步读取用户选中的文件
<input type="file" accept="image/*"  onchange = "selectedFile()"/>

function selectedFile(){
    var oFile = event.target.files[0];
    
    var fileReader = new FileReader();

    fileReader.onload = function(){
      var base64URL =  this.result ;
      var blob = convertBase64UrlToBlob(base64URL,'image/jpeg');
      uploadImage(blob);
    }

    fileReader.readAsDataURL(oFile)    
}

//2,第二步将base64图片转换为Blob对象

 function convertBase64UrlToBlob(urlData, filetype){
            //去掉url的头,并转换为byte
            var bytes = window.atob(urlData.split(',')[1]);
            //处理异常,将ascii码小于0的转换为大于0
            var ab = new ArrayBuffer(bytes.length);
            var ia = new Int8Array(ab);
            var i;
            for (i = 0; i < bytes.length; i++) {
                ia[i] = bytes.charCodeAt(i);
            }
            return new Blob([ab], {type : filetype});
}

//3,第三步使用formData上传数据
function uploadImage(blob){
  var formData = new FormData();
    formData.append('userProfile',blob);
    var xhr = new XMLHttpRequest();
    // xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");  // 将参数解析成传统form的方式上传
    xhr.open('post', '/upload.php',true);
  xhr.onload = fn();//上传成功事件监听
  xhr.onerror = fn(); //上传失败事件监听
xhr.send(formData); }

 

一种更简便的H5上传方式

var change = function(){
        var file = event.target.files[0];
        var fileReader = new FileReader();

        var toBlob = function(a){
            return new Blob([a],{type:file.type})
        }
        fileReader.onload = function(){
            var result = this.result;
            var blob = new Blob([result],{type:file.type});
            var formData = new FormData();
            formData.append('userAvatar',blob,file.name);
       //添加其他表单字段 formData.append(
'username',document.getElementById("uname").value) formData.append('pwd',document.getElementById("upwd").value); $.ajax({ type:"post", url:"http://localhost:3000/uploads", async:true, processData:false, contentType:false, data:formData, timeout:6000, success:function (data) { console.log('upload success') }, error:function (xhr,text) { if(text === 'timeout'){ xhr.abort(); } } }); } fileReader.readAsArrayBuffer(file); }

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值