jQuery 中如何使用formdata 上传图片?

发布于 2022-09-06 04:15:37 字数 2572 浏览 18 评论 0

图片在上传过程中,需要将图片转换成 二进制数据,要怎么写呢?网上找的都不合适。我是这样写的,因为在上传前需要预览,也可以多图上传,下面的方法是获取不到图片数据的,只能获取到图片的name,type,size:

<div class="anviz-upload-file">
    <div class="image-item">
        <input id="file" type="file" />
    </div>
</div>
function getImgList(){
    var myfile = document.getElementById('file');    
    var List = document.getElementsByClassName('img-list')[0];
    
    myfile.onchange = function(){
        var files = this.files;
        if(!files)return;
        if(files.length > 0){
            jQuery('#imgList').show();        
        }else{
            jQuery('#imgList').hide();        
        }
        
        var fileArr =  [];
        var fileEntity = {};
        if(files){
            for(var i = 0;i<files.length;i++){    
                var reader = new FileReader();
                reader.onload = function() {
                      //处理 android 4.1 兼容问题
                    var base64 = reader.result.split(',')[1];
                    var dataUrl = 'data:image/png;base64,' + base64;

                    var blob = dataURLtoBlob(dataURL);
                }
                
                //chrome,firefox并且safari浏览器不能正常工作,必须重新将对象组织
                fileEntity.name = files[i].name;
                fileEntity.type = files[i].type;
                fileEntity.size = files[i].size;
                fileEntity.lastModified = files[i].lastModified;
                fileEntity.lastModifiedDate = files[i].lastModifiedDate;
                fileEntity.webkitRelativePath = files[i].webkitRelativePath;
                
                fileArr.push(fileEntity);
                var data = JSON.stringify(fileArr);
                sessionStorage.setItem('arr',data);
                
                var oLi = '<li><img src="'+URL.createObjectURL(files[i])+'"><span class="close" onclick="closeli(this)" >&times;</span></li>';    
                List.innerHTML+=oLi; 
            }
        }
    }
}

感谢陌路凡歌(4.4k 声望)的帮助下写了formdata的方法,下面是所有数据的组织:

function buildJson() {
    var arr = JSON.parse(sessionStorage.getItem('arr'));
    var formData = new FormData(); 
    formData.append("files", arr);

    var jsonObj = {'imgList':formData};
    return jsonObj;
}

FormData的数据在调试中显示为,我从调试中感觉这个数据似乎不太对,imgList[]都为空,FormData到底是不是把图片都转成了二进制的方法,看不到啊:

clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

人生戏 2022-09-13 04:15:37

直接push,有兴趣可以看看我的博客链接描述

//onchange 
    for(var i = 0;i<files.length;i++){                
         fileArr.push(files[i]);
        //....图片的预览操作
    }


//提交
function sub(){    
var formData = new FormData();    
    for(var i =0;i<fileArr.length;i++){    //提交时,我们把fileArr中的数据遍历一遍
        formData.append("upfile[]", fileArr[i]); 
    };
    $.ajax({
          url: "1.php",
          type: "POST",
          data:formData,
          cache:false,         //不设置缓存
          processData: false,  // 不处理数据
          contentType: false   // 不设置内容类型
    });    
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文