关于Java与前端jQuery的图片传输功能小结

来源:互联网 发布:苹果手机淘宝p图软件 编辑:程序博客网 时间:2024/06/11 05:56

在这几天的开发当中,遇到一个比较头疼的问题。在一个业务实现当中,需要对一条记录进行增删改功能,但是在这个功能里面,还有一个关于图片文件的增删改。


这里,我就用到了ajaxFileUpload这个比较牛逼的东东。话不多说,上代码!


当然,前提是引入一个js文件才行,这就是引入的技术文件// JavaScript DocumentjQuery.extend({    createUploadIframe: function(id, uri) {   //create frame            var frameId = 'jUploadFrame' + id;                        if(window.ActiveXObject) {                //var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />');            if(jQuery.browser.version=="9.0" || jQuery.browser.version=="10.0"){                      var io = document.createElement('iframe');                      io.id = frameId;                      io.name = frameId;                  }else if(jQuery.browser.version=="6.0" || jQuery.browser.version=="7.0" || jQuery.browser.version=="8.0"){                      var io = document.createElement('<iframe id="' + frameId + '" name="' + frameId + '" />');                  if(typeof uri== 'boolean'){                    io.src = 'javascript:false';                }                else if(typeof uri== 'string'){                    io.src = uri;                }                }            }else {                var io = document.createElement('iframe');                io.id = frameId;                io.name = frameId;            }            io.style.position = 'absolute';            io.style.top = '-1000px';            io.style.left = '-1000px';            document.body.appendChild(io);            return io;       },    createUploadForm: function(id, fileElementId, data) {  //create form   var formId = 'jUploadForm' + id;  var fileId = 'jUploadFile' + id;  var form = jQuery('<form  action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');   var oldElement = jQuery('#' + fileElementId);  var newElement = jQuery(oldElement).clone();  jQuery(oldElement).attr('id', fileId);  jQuery(oldElement).before(newElement);  jQuery(oldElement).appendTo(form);    //add data  if(data) {     for (var i in data) {         $('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form);     }   }  //set attributes  jQuery(form).css('position', 'absolute');  jQuery(form).css('top', '-1200px');  jQuery(form).css('left', '-1200px');  jQuery(form).appendTo('body');    return form;    },        testt: function(){    alert("testt");    },    ajaxFileUpload: function(s) {        // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout          s = jQuery.extend({}, jQuery.ajaxSettings, s);        var id = s.id;                //var id = s.fileElementId;        var form = jQuery.createUploadForm(id, s.fileElementId,s.data);var io = jQuery.createUploadIframe(id, s.secureuri);var frameId = 'jUploadFrame' + id;var formId = 'jUploadForm' + id;          if( s.global && ! jQuery.active++ ){// Watch for a new set of requestsjQuery.event.trigger( "ajaxStart" );}                    var requestDone = false;        // Create the request object        var xml = {};           if( s.global ){         jQuery.event.trigger("ajaxSend", [xml, s]);        }                            var uploadCallback = function(isTimeout){  // Wait for a response to come back var io = document.getElementById(frameId);try{    if(io.contentWindow){xml.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;xml.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;    }else if(io.contentDocument){    xml.responseText = io.contentDocument.document.body?io.contentDocument.document.body.innerHTML:null;    xml.responseXML = io.contentDocument.document.XMLDocument?io.contentDocument.document.XMLDocument:io.contentDocument.document;    }      }catch(e){jQuery.handleError(s, xml, null, e);}            if( xml || isTimeout == "timeout"){                    requestDone = true;                var status;                try {                    status = isTimeout != "timeout" ? "success" : "error";                    // Make sure that the request was successful or notmodified                    if( status != "error" ){                        // process the data (runs the xml through httpData regardless of callback)                        var data = jQuery.uploadHttpData( xml, s.dataType );                                                if( s.success ){                        // ifa local callback was specified, fire it and pass it the data                    s.success( data, status );                        };                                         if( s.global ){                        // Fire the global callback                        jQuery.event.trigger( "ajaxSuccess", [xml, s] );                        };                                                } else{                     jQuery.handleError(s, xml, status);                    }                                        } catch(e){                    status = "error";                    jQuery.handleError(s, xml, status, e);                };                                if( s.global ){                // The request was completed            jQuery.event.trigger( "ajaxComplete", [xml, s] );                };                // Handle the global AJAX counter                if(s.global && ! --jQuery.active){                 jQuery.event.trigger("ajaxStop");                };                if(s.complete){                  s.complete(xml, status);                };                                 jQuery(io).unbind();                setTimeout(function(){                try{jQuery(io).remove();jQuery(form).remove();                 }catch(e){      jQuery.handleError(s, xml, null, e);            }}, 100);                xml = null;            };        }        // Timeout checker        if( s.timeout > 0 ){            setTimeout(function(){if(!requestDone ){uploadCallback( "timeout" );}}, s.timeout);        }        try{var form = jQuery('#' + formId);jQuery(form).attr('action', s.url);jQuery(form).attr('method', 'POST');jQuery(form).attr('target', frameId);            if(form.encoding){                form.encoding = 'multipart/form-data';                }else{                    form.enctype = 'multipart/form-data';            }               jQuery(form).submit();        } catch(e){               jQuery.handleError(s, xml, null, e);        }        /*if(window.attachEvent){            document.getElementById(frameId).attachEvent('onload', uploadCallback);        }        else{            document.getElementById(frameId).addEventListener('load', uploadCallback, false);        }   */        jQuery('#' + frameId).load(uploadCallback);        return {abort: function () {}};     },    uploadHttpData: function( r, type ) {        var data = !type;        data = type == "xml" || data ? r.responseXML : r.responseText;        // ifthe type is "script", eval it in global context        if( type == "script" ){         jQuery.globalEval( data );        }                    // Get the JavaScript object, ifJSON is used.        if( type == "json" ){        data = r.responseText;              var start = data.indexOf(">");              if(start != -1) {                var end = data.indexOf("<", start + 1);                if(end != -1) {                  data = data.substring(start + 1, end);                 }              }              eval( "data = " + data);          }                    // evaluate scripts within html        if( type == "html" ){         jQuery("<div>").html(data).evalScripts();        }                    return data;    },    /*handleError: function( s, xml, status, e ) {// If a local callback was specified, fire itif ( s.error )s.error( xml, status, e );// Fire the global callbackif ( s.global )jQuery.event.trigger( "ajaxError", [xml, s, e] );}*/    handleError: function( s, xhr, status, e ) {        // If a local callback was specified, fire it        if ( s.error ) {            s.error.call( s.context || s, xhr, status, e );        }        // Fire the global callback        if ( s.global ) {        (s.context ? jQuery(s.context) : jQuery.event).trigger("ajaxError", [xhr, s, e] );        }    }});


获取文件大小的函数(这些函数,是我从别的地方摘抄的,具体的出处我也忘了,望作者勿怪,借用一下咯)

function getFileSize(obj){    var objValue = obj.value;    if (objValue=="") return ;    var fileLenth=-1;    try {        //对于IE判断要上传的文件的大小        var fso = new ActiveXObject("Scripting.FileSystemObject");        fileLenth=parseInt(fso.getFile(objValue).size);    } catch (e){        try{            //对于非IE获得要上传文件的大小             fileLenth=parseInt(obj.files[0].size);        }catch (e) {            fileLenth=-1;                   }           }    return fileLenth;} 

    function _s() {          var f = document.getElementById("f").files;          //上次修改时间          alert(f[0].lastModifiedDate);          //名称          alert(f[0].name);          //大小 字节          alert((f[0].size)/1024);          //类型          alert(f[0].type);      }





首先,这是新增图片时的功能:

function FileUpload(){//这是新增时需要的js$.ajaxFileUpload({url:"uploads",secureuri:false,fileElementId:'fileToUpload',dataType:"json",data:{ },success:function(data,status){alert("上传成功!");//$("#viewImg").attr("src",data.picUrl);},error:function(data,status,e) {alert("上传出错!");}});return false;};


这是新增功能的html代码

     <p>选择图片后,点击按钮上传</p>     <input id="fileToUpload" type="file" size="45" name="fileToUpload" class="input">     <button class="button" onclick="FileUpload()">上传</button>     <br>     <img id="viewImg">
修改使用到的html代码

<h1>选择图片后,点击按钮上传</h1><input id="fileToUploads" type="file" size="45" name="fileToUpload" class="input"><br><img id="viewImgs">



由于代码较多,我就不详细写出来,我把前台和后端的代码都列出来,大家看看


function loadorgmsg(){//对数据进行修改操作$("#alertfactory").on().click(function(){    var result ='';    var fid = document.getElementById('form1');    var box = fid.getElementsByTagName('input');    var box_checked=new Array();//创建一个复选框被选中的数组    var message="";    for (var i = 0; i < box.length; i++){    //只允许选中单个复选框进行数据修改        if (box[i].type == 'checkbox' && box[i].checked && box[i].getAttribute("value")!=null){             var message=box[i].getAttribute("value");//把符合要求的元素放到数组的最后面box_checked.push(box[i]);};    };        //判断被选中复选框数组元素的个数。因为是修改数据,因此在业务场景中我们最好是对单个数据进行修改:    if(box_checked.length>1){//如果大于1,则表示有两个被选中了,这时是不方便对数据做修改操作的,要提示给用户    alert("抱歉,只允许选中单个复选框");   return false;    };         if(box_checked[0]==null){//如果数组为空,则表明没有选中复选框,应该提示用户去选中复选框    alert("请选中一条你需要修改的数据");   return false;    };    alert("恭喜你,符合条件!");    alert(message);            var Mesg=new Array();Mesg=message.split("[*]");var org_info_id=Mesg[0];//IDvar org_number=Mesg[1];//专业名称var org_name=Mesg[2];//专业分类信息备注var load_path=Mesg[3];//获取旧的文件路径var org_address=Mesg[4];var org_desc=Mesg[5];var contact_type_number=Mesg[6];var contact_name=Mesg[7];var contact_gender=Mesg[8];var OfficeTel=Mesg[9];var Phone=Mesg[10];var Email=Mesg[11];var gddhs=Mesg[12];var sjs=Mesg[13];var yxs=Mesg[14];//这一步是为了方便用户更加直观的修改数据$("#orgname").val(org_name);    $("#orgnumber").val(org_number);    $("#orgaddress").val(org_address);    $("#contactname").val(contact_name);    $("#orggender").val(contact_gender);    $("#tel").val(OfficeTel);    $("#phone").val(Phone);    $("#email").val(Email);    $("#desc").val(org_desc);//下一步是获取文本框内的数据.//这才是这整的修改数据,向服务器发送修改了的数据 $("#editfactory").click(function(){var fileToUploads=$("#fileToUploads").val().trim();//获取新上传文件//获取文件路径//fileToUpload的文件路径:c:\fakepath\123456789.jpg//alert(fileToUpload);var path1=fileToUploads.lastIndexOf("\\");//双斜杠转义字符//alert(path1);var path2=fileToUploads.substring(path1+1);//获取文件名,包含文件后缀名var reg1=fileToUploads.lastIndexOf(".");//双斜杠转义字符var reg2=fileToUploads.substring(reg1+1);//获取文件后缀//alert(path2);//alert(reg2);var fileType=new RegExp(/^(jpg|png|bmp)$/);//判断文件格式是否为png、jpg、bmp格式的alert(fileType.test(reg2));if(fileType.test(reg2)==false){alert("请选择png、jpg、bmp格式文件");return false;}//jQuery获取文件大小 var files=$("#fileToUploads")[0].files;//把jQuery对象变为DOM对象 filesize=files[0].size/1024; //alert(filesize); //判断文件大小 if(filesize>3*1024){ alert("文件大小超过3M,不符合要求!"); return false; }//获取文件路径var loadpaths="/uploads/"+path2;//获取新的文件路径  //alert(load_path);  //alert(loadpaths);  var orgname=$("#orgname").val().trim();    var orgnumber=$("#orgnumber").val().trim();    var orgaddress=$("#orgaddress").val().trim();    var contactname=$("#contactname").val().trim();    var gender=$("#orggender").val().trim();    var tel=$("#tel").val().trim();    var phones=$("#phone").val().trim();    var emails=$("#email").val().trim();    var desc=$("#desc").val().trim();     alert(gender);  alert("phones:"+phones);  //这一步,是比较有用的var params="oldpath="+load_path+"&org_info_id="+org_info_id+"&org_name="+orgname+"&load_path="+loadpaths+"&org_address="+orgaddress+"&org_desc="+desc+"&org_number="+orgnumber+"&contact_type_number="+contact_type_number+"&contact_name="+contactname+"&contact_gender="+gender+"&contact_type_name1="+gddhs+"&contact_info1="+tel+"&contact_type_name2="+sjs+"&contact_info2="+phones+"&contact_type_name3="+yxs+"&contact_info3="+emails;   $.ajaxFileUpload({url:"/Terminal/org_msg/orgMsg_UpdateController.do?"+params,secureuri:false,fileElementId:"fileToUploads",type:"post",data:params,dataType:"JSON",success:function(result){alert("修改数据成功!");$("#editModal").modal("hide");orgmsg();//刷新$(".modal-backdrop").remove();},error:function(){alert("修改数据失败!");specialty();$(".modal-backdrop").remove();}});}); });  //新增信息$("#createfactory").on().click(function(){//alert(mdber);var gsqc=$("#gsqc").val().trim();//公司全称var yyzz=$("#yyzz").val().trim();//营业执照注册号var fileToUpload=$("#fileToUpload").val().trim();var gsdz=$("#gsdz").val().trim();var gslxr=$("#gslxr").val().trim();var xb=$("#xb").val().trim();var bgdh=$("#bgdh").val().trim();var sjhm=$("#sjhm").val().trim();var yx=$("#yx").val().trim();var bz=$("#bz").val().trim();//判断字段是否为空if(gsqc=="" || yyzz=="" || fileToUpload=="" || gsdz=="" || gslxr=="" || xb=="" || bgdh=="" || sjhm=="" || yx=="" || bz==""){alert("字段不能为空");return false;}//获取文件路径//fileToUpload的文件路径:c:\fakepath\123456789.jpg//alert(fileToUpload);var path1=fileToUpload.lastIndexOf("\\");//双斜杠转义字符//alert(path1);var path2=fileToUpload.substring(path1+1);//获取文件名,包含文件后缀名var reg1=fileToUpload.lastIndexOf(".");//双斜杠转义字符var reg2=fileToUpload.substring(reg1+1);//获取文件后缀var fileType=new RegExp(/^(jpg|png|bmp)$/);//判断文件格式是否为png、jpg、bmp格式的alert(fileType.test(reg2));if(fileType.test(reg2)==false){alert("请选择png、jpg、bmp格式文件");return false;} //jQuery获取文件大小 var files=$("#fileToUpload")[0].files;//把jQuery对象变为DOM对象 filesize=files[0].size/1024; alert(filesize); //判断文件大小 if(filesize>3*1024){ alert("文件大小超过3M,不符合要求!"); return false; }//获取文件路径var loadpath="/uploads/"+path2; $.ajax({url:"/Terminal/org_msg/OrgMsg_InsertController.do",type:"post",data:{"org_name":gsqc,//公司全称"load_path":loadpath,"org_address":gsdz,//公司地址"org_desc":bz,"org_number":yyzz,"contact_name":gslxr,//公司联系人"contact_gender":xb,"contact_type_name1":"固定电话",//具体联系方式1"contact_info1":bgdh,"contact_type_name2":"手机",//具体联系方式2"contact_info2":sjhm,"contact_type_name3":"电子邮箱",//具体联系方式3"contact_info3":yx},dataType:"json",success:function(result){var type=result.head.type;//alert(type);if(type==0){desc=result.head.desc;FileUpload();alert(desc);$("#delModal").modal("hide");orgmsg();  $(".modal-backdrop").remove();  }},error:function(){alert("新增数据失败!");}});});//删除$("#DelFactory").on().click(function(){var desc="";    var count =0;    var result ='';    var fid = document.getElementById('form1');    var box = fid.getElementsByTagName('input');$("#alarm").html("");//统计被选中的个数var count=0;    for (var i = 0; i < box.length; i++){        if (box[i].type == 'checkbox' && box[i].checked && box[i].getAttribute("value")!=null){   count++;        //当选中复选框并删除时,会根据不为空的复选框获取相应的id,去做删除操作!            //result = box[i].id +i+','+box[i].getAttribute("value");            var message=box[i].getAttribute("value");             alert(message);//alert(box[i].getAttribute("value"));       /**     * 如若需要删除组织机构信息,则需要获取一下信息:     * org_info表的ID和load_path     * contact_type表的contact_type_number     *      */                              var Mesg=new Array();             Mesg=message.split("[*]");             var org_info_id=Mesg[0];             var load_path=Mesg[3];             var contact_type_number=Mesg[6];                          $(function(){$.ajax({url:"/Terminal/org_msg/orgMsg_DeleteController.do",type:"post",data:{"org_info_id":org_info_id,"oldpath":load_path,"contact_type_number":contact_type_number},dataType:"json",success:function(results){var type=results.head.type;//alert(type);if(type==0){desc=results.head.desc;//alert(results.head.desc);$("#delModal").modal("hide");//alert(s);$("#alarm").html("删除成功");  orgmsg();  $(".modal-backdrop").remove();};},error:function(){alert(desc="删除数据失败!");}});});        }            };        if(count==0){        $("#alarm").html("请选中复选框");        $("#ShutDown").click(function(){$("#alarm").html("确定删除选定的数据?");});        $("#sdown").click(function(){$("#alarm").html("确定删除选定的数据?");});    }    });    };

后台代码,我这里只贴出修改和删除的代码,因为修改和新增功能的代码是差不多的。而且,是引用博主孤傲苍狼大牛的文件实现上传功能



1 0