ajax上传图片监听

it2026-10-08  3

 

测试地址:http://www.jq22.com/jquery-info9594

 

 

 

<!doctype html><html><head><meta charset="utf-8"><title>上传文件</title><link rel="stylesheet" href="base.css" /><script src="http://www.jq22.com/jquery/1.11.1/jquery.min.js"></script><style>.fileBox{margin:50px;}.fileInputP{display:inline-block;width:200px;height:30px;border-radius:5px;overflow:hidden;position:relative;}.fileInputP i{display:inline-block;width:200px;height:30px;color:#fff;background:#7d8f33;text-align:center;line-height:30px;}#fileInput{position:absolute;left:0;top:0;right:0;bottom:0;opacity:0;}#fileSpan{display:inline-block;width:300px;height:150px;border:2px dashed #ccc;text-align:center;line-height:150px;}.fileList_parent{margin:50px;display:none;}.fileList_parent th{background:#dadada;font-weight:bold;}.fileList_parent th,.fileList_parent td{padding:5px;}.fileList tr:nth-of-type(2n){background:#dadada;}.progressParent{width:200px;height:20px;border-radius:5px;background:#ccc;overflow:hidden;position:relative;}.progress{width:0%;height:20px;background:#7d8f33;margin: 0px;}.progressNum{display:inline-block;width:100%;height:20px;text-align:center;line-height:20px;color:#fff;position:absolute;left:0;top:0;}#fileBtn{margin-left:50px;display:none;}</style><script>$(function(){        //元素    var oFileBox = $(".fileBox");                    //选择文件父级盒子    var oFileInput = $("#fileInput");                //选择文件按钮    var oFileSpan = $("#fileSpan");                    //选择文件框    var oFileList_parent = $(".fileList_parent");    //表格    var oFileList = $(".fileList");                    //表格tbody    var oFileBtn = $("#fileBtn");                    //上传按钮        var flieList = [];                                //数据,为一个复合数组    var sizeObj = [];                                //存放每个文件大小的数组,用来比较去重    //拖拽外部文件,进入目标元素触发    oFileSpan.on("dragenter",function(){        $(this).text("可以释放鼠标了!").css("background","#ccc");    });    //拖拽外部文件,进入目标、离开目标之间,连续触发    oFileSpan.on("dragover",function(){        return false;    });    //拖拽外部文件,离开目标元素触发    oFileSpan.on("dragleave",function(){        $(this).text("或者将文件拖到此处").css("background","none");    });    //拖拽外部文件,在目标元素上释放鼠标触发    oFileSpan.on("drop",function(ev){        var fs = ev.originalEvent.dataTransfer.files;        analysisList(fs);        //解析列表函数        $(this).text("或者将文件拖到此处").css("background","none");        return false;    });    //点击选择文件按钮选文件    oFileInput.on("change",function(){        analysisList(this.files);    })        //解析列表函数    function analysisList(obj){        //如果没有文件        if( obj.length<1 ){            return false;        }                for( var i=0;i<obj.length;i++ ){            var fileObj = obj[i];        //单个文件            var name = fileObj.name;    //文件名            var size = fileObj.size;    //文件大小            var type = fileType(name);    //文件类型,获取的是文件的后缀                        //文件大于30M,就不上传            if( size > 1024*1024*1024 || size == 0 ){                alert('“'+ name +'”超过了30M,不能上传');                continue;            }                        //文件类型不为这三种,就不上传            /*if( ("pdf/txt/epub").indexOf(type) == -1 ){                alert('“'+ name +'”文件类型不对,不能上传');                continue;            }*/                        //把文件大小放到一个数组中,然后再去比较,如果有比较上的,就认为重复了,不能上传            if( sizeObj.indexOf(size) != -1 ){                alert('“'+ name +'”已经选择,不能重复上传');                continue;            }                        //给json对象添加内容,得到选择的文件的数据            var itemArr = [fileObj,name,size,type];    //文件,文件名,文件大小,文件类型            flieList.push(itemArr);                        //把这个文件的大小放进数组中            sizeObj.push(size);                    }                //console.log(flieList)        //console.log(sizeObj)        createList()                //生成列表        oFileList_parent.show();    //表格显示        oFileBtn.show();            //上传按钮显示    };                //生成列表    function createList(){        oFileList.empty();                    //先清空元素内容        for( var i=0;i<flieList.length;i++ ){                        var fileData = flieList[i];        //flieList数组中的某一个            var objData = fileData[0];        //文件            var name = fileData[1];            //文件名            var size = fileData[2];            //文件大小            var type = fileData[3];            //文件类型            var volume = bytesToSize(size);    //文件大小格式化                                    var oTr = $("<tr></tr>");            var str = '<td><cite title="'+ name +'">'+ name +'</cite></td>';            str += '<td>'+ type +'</td>';            str += '<td>'+ volume +'</td>';            str += '<td><input type="radio" /></td>';            str += '<td>';            str += '<div class="progressParent">';            str += '<p class="progress"></p>';            str += '<span class="progressNum">0%</span>';            str += '</div>';            str += '</td>';            str += '<td><a href="javascript:;" class="operation">删除</a></td>';                        oTr.html(str);            oTr.appendTo( oFileList );        }    }        //删除表格行    oFileList.on("click","a.operation",function(){        var oTr = $(this).parents("tr");        var index = oTr.index();        oTr.remove();        //删除这一行        flieList.splice(index,1);    //删除数据        sizeObj.splice(index,1);    //删除文件大小数组中的项                //console.log(flieList);        //console.log(sizeObj);            });            //上传    oFileBtn.on("click",function(){        oFileBtn.off();        var tr = oFileList.find("tr");        //获取所有tr列表        var successNum = 0;                    //已上传成功的数目        oFileList.off();                    //取消删除事件        oFileBox.slideUp();                    //隐藏输入框        oFileList.find("a.operation").text("等待上传");                        for( var i=0;i<tr.length;i++ ){            uploadFn(tr.eq(i),i);        //参数为当前项,下标        }                        function uploadFn(obj,i){                        var formData = new FormData();            var arrNow = flieList[i];                        //获取数据数组的当前项                        // 从当前项中获取上传文件,放到 formData对象里面,formData参数以key name的方式            var result = arrNow[0];                            //数据            formData.append("imageFile" , result);                        var name = arrNow[1];                            //文件名            formData.append("email" , name);                        var progress = obj.find(".progress");            //上传进度背景元素            var progressNum = obj.find(".progressNum");        //上传进度元素文字            var oOperation = obj.find("a.operation");        //按钮                        oOperation.text("正在上传");                            //改变操作按钮            oOperation.off();                        var request = $.ajax({                type: "POST",                url: "../more/cModifyImageAction.go",                data: formData,            //这里上传的数据使用了formData 对象                processData : false,     //必须false才会自动加上正确的Content-Type                contentType : false,                                //这里我们先拿到jQuery产生的XMLHttpRequest对象,为其增加 progress 事件绑定,然后再返回交给ajax使用                xhr: function(){                    var xhr = $.ajaxSettings.xhr();                    if(onprogress && xhr.upload) {                        xhr.upload.addEventListener("progress" , onprogress, false);                         return xhr;                    }                },                                //上传成功后回调                success: function(){                    oOperation.text("成功");                    successNum++;                    console.log(successNum);                    if(successNum == tr.length){                        open("http://www.baidu.com","_self");    //如果全部传成功了,跳转                    }                },                                //上传失败后回调                error: function(){                    oOperation.text("重传");                    oOperation.on("click",function(){                        request.abort();        //终止本次                        uploadFn(obj,i);                    });                }                            });                                    //侦查附件上传情况 ,这个方法大概0.05-0.1秒执行一次            function onprogress(evt){                alert(evt.loaded);                var loaded = evt.loaded;    //已经上传大小情况                  var tot = evt.total;        //附件总大小                  var per = Math.floor(100*loaded/tot);  //已经上传的百分比                progressNum.html( per +"%" );                 progress.css("width" , per +"%");            }                            }                                        });        });//字节大小转换,参数为bfunction bytesToSize(bytes) {    var sizes = ['Bytes', 'KB', 'MB'];    if (bytes == 0) return 'n/a';    var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));    return (bytes / Math.pow(1024, i)).toFixed(1) + ' ' + sizes[i];};//通过文件名,返回文件的后缀名function fileType(name){    var nameArr = name.split(".");    return nameArr[nameArr.length-1].toLowerCase();}</script></head><body><div class="fileBox">    <p class="fileInputP vm">        <i>选择文件</i>        <input type="file" multiple id="fileInput" />    </p>    <span id="fileSpan" class="vm">或者将文件拖到此处</span>    <div class="mask"></div></div><table width="50%" border="1" class="fileList_parent">    <thead>        <tr>            <th>书名</th>            <th>类型</th>            <th>大小</th>            <th>私藏</th>            <th>进度</th>            <th>操作</th>        </tr>    </thead>        <tbody class="fileList">        <!--<tr>            <td><cite title="彭作洪">彭作洪</cite></td>            <td>pdf</td>            <td>5K</td>            <td><input type="radio" /></td>            <td>                <div class="progressParent">                    <p class="progress"></p>                    <span class="progressNum">0%</span>                </div>            </td>            <td><a href="javascript:;">删除</a></td>        </tr>-->    </tbody>      </table><input type="button" value="上传" id="fileBtn" /></body></html>

转载于:https://www.cnblogs.com/jiahaoJAVA/p/7063298.html

最新回复(0)