美文网首页JavaScript
支持上传多张图片js

支持上传多张图片js

作者: LuckyS007 | 来源:发表于2018-08-27 10:51 被阅读34次

    首先先了解一下:
    1.FileReader
    对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 FileBlob 对象指定要读取的文件或数据。

    2.FormData对象
    用以将数据编译成键值对,以便用[XMLHttpRequest](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest)来发送数据。其主要用于发送表单数据,但亦可用于发送带键数据(keyed data),而独立于表单使用。如果表单enctype属性设为multipart/form-data ,则会使用表单的submit()方法来发送数据,从而,发送数据具有同样形式。

    图片读取以及上传原理:
    1.使用input的file类型,进行图片的获取
    2.使用FileReader读取文件,并且转换成dataURL格式
    3.采用canvas对图片进行剪裁,并且转成dataURL格式;(根据需求做处理)
    4.将dataURL数据转成bolb格式
    5.将bolb添加到FormData对象中,(FormData对象用以将数据编译成键值对)
    6.使用XMLHttpRequest进行图片上传,可以查看进度;

    注意点:
    1.提交图片时,需要把图片地址dataURL转成Blod对象
    2.这里没有对上传图片进行剪裁和数量的限制。

    1.使用input多文件上传,设置好accept

    <input type="file" multiple="multiple" accept="image/jpeg, image/png" class="input_file" onchange="previewImage(this)">
    

    2.使用FileReader读取文件,同时把dataurl转成Blod对象。这里是直接读取本地文件后直接自动上传。

    function previewImage(imgFile) {
        var allFile = imgFile.files;
        var imageArr = [];
        var dataURL;
        for(var i=0;i<allFile.length;i++){
            var file = allFile[i];
            //添加一层过滤
            var rFilter = /^(image\/bmp|image\/gif|image\/jpeg|image\/png|image\/tiff)$/i;
            if(!rFilter.test(file.type)) {
                alert("文件格式必须为图片");
                return;
            }
            var reader = new FileReader();
            reader.readAsDataURL(file); //用文件加载器加载文件
    
            //文件加载完成
            reader.onload = function(e) {
                //以下就是将所有上传的图片回显到页面上
    
                 dataURL = e.target.result;
                 var resultBolb = dataURItoBlob(dataURL);
                 console.log(resultBolb);
                 fileUpload(resultBolb);
    
            };
        }
    }
    

    3.图片上传,在读取文件后调用

    function fileUpload(resultBolb) { 
        var fd = new FormData(); 
        //向form中加入图片数据,name属性是file
        fd.append("file", resultBolb); 
        $.ajax({
            type: 'POST',
            url: '/rebate/uploadPic',
            data: fd,
            processData: false, // 不会将 data 参数序列化字符串
            contentType: false, // 根据表单 input 提交的数据使用其默认的 contentType
            xhr: function() {
                var xhr = new window.XMLHttpRequest();
                xhr.upload.addEventListener("progress", function(evt) {
                    if (evt.lengthComputable) {
                        var percentComplete = evt.loaded / evt.total;
                        console.log('进度', percentComplete);
                    }
                }, false);
         
                return xhr;
            }
        }).success(function (res) {
           //如果上传成功,重新加载页面,这一步就不能这样写。
            var li = document.createElement('li');
                li.className = "upload-li";
                li.innerHTML = '<div class="item_image">'+
                                    '<img class="upload-image" style="width:80px; height:80px;" src="'+res.data[0]+'"/>'+
                                    '<span class="delete-span"></span>'
                                '</div>';
                document.getElementById("uploadUL").append(li);
    
                $("#uploadUL").on("click",".delete-span",function(e){
    
                    var dd = $(this).parent().parent().remove();
                })
        }).error(function (error) {
            console.error(error);
        });
    
    
    }
    

    参考:https://www.jianshu.com/p/b87f434e809e 谢谢你!

    相关文章

      网友评论

        本文标题:支持上传多张图片js

        本文链接:https://www.haomeiwen.com/subject/golziftx.html