springmvc的照片上传功能

来源:互联网 发布:斗鱼免费刷火箭软件 编辑:程序博客网 时间:2024/05/08 08:38


实现原理:利用ajaxfileupload.js + springmvc进行图片文件的上传,再利用base64编码技术得到图片的编码字符串,并返回到页面进行img预览。还可以吧编码字符串存入数据库,较大文件不建议存入数据库。(需要jQuery支持)


js代码:

[javascript] view plain copy
print?
  1. /** 
  2.  * 图片上传 
  3.  */  
  4. function ajaxFileUpload() {  
  5.     .ajaxFileUpload({&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:<span class="string">'../../../hr/upload.do'</span><span>,&nbsp;</span><span class="comment">//需要链接到服务器地址</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;secureuri:<span class="keyword">false</span><span>,&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fileElementId:<span class="string">'file'</span><span>,&nbsp;</span><span class="comment">//文件选择框的id属性</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataType:&nbsp;<span class="string">'json'</span><span>,&nbsp;&nbsp;</span><span class="comment">//服务器返回的格式类型</span><span>&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;success:&nbsp;<span class="keyword">function</span><span>&nbsp;(data,&nbsp;status)&nbsp;</span><span class="comment">//成功</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">var</span><span>&nbsp;json&nbsp;=&nbsp;&nbsp;eval(</span><span class="string">"("</span><span>+data+</span><span class="string">")"</span><span>);</span><span class="comment">//解析返回的json</span><span>&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">var</span><span>&nbsp;imageCode&nbsp;=&nbsp;json.imageCode;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span><span>(imageCode!=</span><span class="string">'-1'</span><span>){&nbsp;&nbsp;</span></span></li><li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<span class="string">"#showImg"</span><span>).attr(</span><span class="string">"src"</span><span>,&nbsp;imageCode);&nbsp;&nbsp;&nbsp;</span></span></li><li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(”#input_photo”).val(imageCode);  
  6.                
  7.            }else{  
  8.              alert(”上传失败!只允许上传图片类型(jpg,gif,png)且小于1M的照片”);  
  9.            }  
  10.               
  11.              
  12.        },  
  13.        error: function (data, status, e) //异常  
  14.        {  
  15.           alert(”出错了,请重新上传!”);  
  16.        }  
  17.    });  
  18. }  
/** * 图片上传 */function ajaxFileUpload() {    $.ajaxFileUpload({       url:'../../../hr/upload.do', //需要链接到服务器地址       secureuri:false,       fileElementId:'file', //文件选择框的id属性       dataType: 'json',  //服务器返回的格式类型       success: function (data, status) //成功       {                 var json =  eval("("+data+")");//解析返回的json           var imageCode = json.imageCode;           if(imageCode!='-1'){             $("#showImg").attr("src", imageCode);              $("#input_photo").val(imageCode);           }else{             alert("上传失败!只允许上传图片类型(jpg,gif,png)且小于1M的照片");           }       },       error: function (data, status, e) //异常       {          alert("出错了,请重新上传!");       }   });}


Java代码:

[java] view plain copy
print?
  1. import java.io.IOException;  
  2. import java.io.PrintWriter;  
  3. import java.util.HashMap;  
  4. import java.util.Map;  
  5.   
  6. import javax.servlet.http.HttpServletRequest;  
  7. import javax.servlet.http.HttpServletResponse;  
  8.   
  9. import org.springframework.stereotype.Controller;  
  10. import org.springframework.web.bind.annotation.RequestMapping;  
  11. import org.springframework.web.bind.annotation.RequestMethod;  
  12. import org.springframework.web.bind.annotation.RequestParam;  
  13. import org.springframework.web.multipart.commons.CommonsMultipartFile;  
  14.   
  15. import com.cpeam.hr.util.ImageUtil;  
  16. import com.google.gson.Gson;  
  17. import com.google.gson.GsonBuilder;  
  18.   
  19. /** 
  20.  * 图片上传控制器 
  21.  * @author tanfei 
  22.  * @date 2013-09-23 
  23.  */  
  24. @Controller  
  25. @RequestMapping(“/hr”)  
  26. public class ImgUploadAction {  
  27.   
  28.     @RequestMapping(value=“uploadImg”)  
  29.     public void uploadImg() {  
  30.           
  31.     }  
  32.       
  33.     /** 
  34.      * 上传 
  35.      * @param file 
  36.      * @param request 
  37.      * @param model 
  38.      * @return 
  39.      */  
  40.     @RequestMapping(value=“/upload”,method=RequestMethod.POST)  
  41.     public void fileUpload(@RequestParam(“file”)CommonsMultipartFile file,HttpServletRequest request  
  42.             ,HttpServletResponse response){  //图片文件上传  
  43.           
  44.         Map<String, Object> resMap = new HashMap<String, Object>();  
  45.         String imageCode = ”-1”;//默认上传失败  
  46.         /**判断文件是否为空,空直接返回上传错误**/  
  47.         if(!file.isEmpty()){  
  48.               
  49.             //获得文件后缀名  
  50.             String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(”.”));  
  51.             if(suffix.equals(“.jpg”) || suffix.equals(“.gif”) || suffix.equals(“.png”)) {//检测图片类型  
  52.                 if(file.getSize() > 1000000) {  
  53.                     imageCode = ”-1”;  
  54.                     //throw new Exception(“上传失败:文件大小不能超过1M”);  
  55.                 }else {  
  56.                     try {  
  57.                         //将上传的图片转换成base64编码字符串  
  58.                         imageCode = ”data:image/gif;base64,” + ImageUtil.encodeImageToStr(file.getInputStream());  
  59.                     } catch (IOException e) {  
  60.                         e.printStackTrace();  
  61.                     }  
  62.                 }  
  63.             }  
  64.         }else{  
  65.             imageCode = ”-1”;  
  66.         }  
  67.           
  68.         resMap.put(”imageCode”, imageCode);  
  69.         response.setContentType(”text/html;charset=UTF-8”);//指定响应内容类型,避免<pre…  
  70.           
  71.         try {  
  72.             PrintWriter out = response.getWriter();  
  73.             Gson gson = new GsonBuilder().create();  
  74.             String gsonStr = gson.toJson(resMap);  
  75.             out.write(gsonStr);  
  76.             out.flush();  
  77.               
  78.         } catch (IOException e) {  
  79.             e.printStackTrace();  
  80.         }  
  81.     }  
  82.       
  83. }  
import java.io.IOException;import java.io.PrintWriter;import java.util.HashMap;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.multipart.commons.CommonsMultipartFile;import com.cpeam.hr.util.ImageUtil;import com.google.gson.Gson;import com.google.gson.GsonBuilder;/** * 图片上传控制器 * @author tanfei * @date 2013-09-23 */@Controller@RequestMapping("/hr")public class ImgUploadAction {    @RequestMapping(value="uploadImg")    public void uploadImg() {    }    /**     * 上传     * @param file     * @param request     * @param model     * @return     */    @RequestMapping(value="/upload",method=RequestMethod.POST)    public void fileUpload(@RequestParam("file")CommonsMultipartFile file,HttpServletRequest request            ,HttpServletResponse response){  //图片文件上传        Map<String, Object> resMap = new HashMap<String, Object>();        String imageCode = "-1";//默认上传失败        /**判断文件是否为空,空直接返回上传错误**/        if(!file.isEmpty()){            //获得文件后缀名            String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));            if(suffix.equals(".jpg") || suffix.equals(".gif") || suffix.equals(".png")) {//检测图片类型                if(file.getSize() > 1000000) {                    imageCode = "-1";                    //throw new Exception("上传失败:文件大小不能超过1M");                }else {                    try {                        //将上传的图片转换成base64编码字符串                        imageCode = "data:image/gif;base64," + ImageUtil.encodeImageToStr(file.getInputStream());                    } catch (IOException e) {                        e.printStackTrace();                    }                }            }        }else{            imageCode = "-1";        }        resMap.put("imageCode", imageCode);        response.setContentType("text/html;charset=UTF-8");//指定响应内容类型,避免<pre...        try {            PrintWriter out = response.getWriter();            Gson gson = new GsonBuilder().create();            String gsonStr = gson.toJson(resMap);            out.write(gsonStr);            out.flush();        } catch (IOException e) {            e.printStackTrace();        }    }}



springmvc文件配置:

[html] view plain copy
print?
  1. <!– 文件上传相关start tanfei 2013-09-20–>  
  2.     <!– SpringMVC上传文件时,需要配置MultipartResolver处理器  –>  
  3.     <bean id=“multipartResolver” class=“org.springframework.web.multipart.commons.CommonsMultipartResolver”>   
  4.         <!– 指定所上传文件的总大小不能超过200KB。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 –>  
  5.         <property name=“maxUploadSize” value=“200000”/>   
  6.     </bean>   
  7.        
  8.     <!– SpringMVC在超出上传文件限制时,会抛出org.springframework.web.multipart.MaxUploadSizeExceededException –>      
  9.     <!– 该异常是SpringMVC在检查上传的文件信息时抛出来的,而且此时还没有进入到Controller方法中 –>  
  10.     <bean id=“exceptionResolver” class=“org.springframework.web.servlet.handler.SimpleMappingExceptionResolver”>   
  11.         <property name=“exceptionMappings”>   
  12.             <props>   
  13.                 <!– 遇到MaxUploadSizeExceededException异常时,自动跳转到/WEB-INF/jsp/error_fileupload.jsp页面 –>  
  14.                 <prop key=“org.springframework.web.multipart.MaxUploadSizeExceededException”>error_fileupload</prop>   
  15.                 <prop key=“java.lang.Exception”>error_all</prop>  
  16.             </props>   
  17.         </property>  
  18.      </bean>  
  19.      <!– 文件上传相关end –>  
<!-- 文件上传相关start tanfei 2013-09-20-->    <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器  -->    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">         <!-- 指定所上传文件的总大小不能超过200KB。注意maxUploadSize属性的限制不是针对单个文件,而是所有文件的容量之和 -->        <property name="maxUploadSize" value="200000"/>     </bean>     <!-- SpringMVC在超出上传文件限制时,会抛出org.springframework.web.multipart.MaxUploadSizeExceededException -->        <!-- 该异常是SpringMVC在检查上传的文件信息时抛出来的,而且此时还没有进入到Controller方法中 -->    <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">         <property name="exceptionMappings">             <props>                 <!-- 遇到MaxUploadSizeExceededException异常时,自动跳转到/WEB-INF/jsp/error_fileupload.jsp页面 -->                <prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">error_fileupload</prop>                 <prop key="java.lang.Exception">error_all</prop>            </props>         </property>     </bean>     <!-- 文件上传相关end -->




jquery插件ajaxfileupload.js:

[javascript] view plain copy
print?
  1. jQuery.extend({  
  2.       
  3.   
  4.     createUploadIframe: function(id, uri)  
  5.     {  
  6.             //create frame  
  7.             var frameId = ‘jUploadFrame’ + id;  
  8.             var iframeHtml = ‘<iframe id=”’ + frameId + ‘” name=”’ + frameId + ‘” style=”position:absolute; top:-9999px; left:-9999px”’;  
  9.             if(window.ActiveXObject)  
  10.             {  
  11.                 if(typeof uri== ‘boolean’){  
  12.                     iframeHtml += ’ src=”’ + ‘javascript:false’ + ‘”’;  
  13.   
  14.                 }  
  15.                 else if(typeof uri== ‘string’){  
  16.                     iframeHtml += ’ src=”’ + uri + ‘”’;  
  17.   
  18.                 }     
  19.             }  
  20.             iframeHtml += ’ />’;  
  21.             jQuery(iframeHtml).appendTo(document.body);  
  22.   
  23.             return jQuery(‘#’ + frameId).get(0);              
  24.     },  
  25.     createUploadForm: function(id, fileElementId,data)  
  26.     {  
  27.         //create form     
  28.         var formId = ‘jUploadForm’ + id;  
  29.         var fileId = ‘jUploadFile’ + id;  
  30.         var form = jQuery(‘<form  action=”“ method=”POST” name=”’ + formId + ‘” id=”’ + formId + ‘” enctype=”multipart/form-data”></form>’);      
  31.         var oldElement = jQuery(‘#’ + fileElementId);  
  32.         var newElement = jQuery(oldElement).clone();  
  33.         jQuery(oldElement).attr(’id’, fileId);  
  34.         jQuery(oldElement).before(newElement);  
  35.         jQuery(oldElement).appendTo(form);  
  36.           
  37.         /*****    增加参数的支持   *****/   
  38.         if (data) {    
  39.             for (var i in data) {    
  40.                 $(’<input type=”hidden” name=”’ + i + ‘” value=”’ + data[i] + ‘” />’).appendTo(form);    
  41.             }    
  42.         }  
  43.           
  44.         //set attributes  
  45.         jQuery(form).css(’position’‘absolute’);  
  46.         jQuery(form).css(’top’‘-1200px’);  
  47.         jQuery(form).css(’left’‘-1200px’);  
  48.         jQuery(form).appendTo(’body’);        
  49.         return form;  
  50.     },  
  51.   
  52.     ajaxFileUpload: function(s) {  
  53.         // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout          
  54.         s = jQuery.extend({}, jQuery.ajaxSettings, s);  
  55.         var id = new Date().getTime();  
  56.         // ADD  s.data  
  57.         var form = jQuery.createUploadForm(id, s.fileElementId, s.data);  
  58.         var io = jQuery.createUploadIframe(id, s.secureuri);  
  59.         var frameId = ‘jUploadFrame’ + id;  
  60.         var formId = ‘jUploadForm’ + id;          
  61.         // Watch for a new set of requests  
  62.         if ( s.global && ! jQuery.active++ )  
  63.         {  
  64.             jQuery.event.trigger( ”ajaxStart” );  
  65.         }              
  66.         var requestDone = false;  
  67.         // Create the request object  
  68.         var xml = {}     
  69.         if ( s.global )  
  70.             jQuery.event.trigger(”ajaxSend”, [xml, s]);  
  71.         // Wait for a response to come back  
  72.         var uploadCallback = function(isTimeout)  
  73.         {             
  74.             var io = document.getElementById(frameId);  
  75.             try   
  76.             {                 
  77.                 if(io.contentWindow)  
  78.                 {  
  79.                      xml.responseText = io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;  
  80.                      xml.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;  
  81.                        
  82.                 }else if(io.contentDocument)  
  83.                 {  
  84.                      xml.responseText = io.contentDocument.document.body?io.contentDocument.document.body.innerHTML:null;  
  85.                     xml.responseXML = io.contentDocument.document.XMLDocument?io.contentDocument.document.XMLDocument:io.contentDocument.document;  
  86.                 }                         
  87.             }catch(e)  
  88.             {  
  89.                 jQuery.handleError(s, xml, null, e);  
  90.             }  
  91.             if ( xml || isTimeout == “timeout”)   
  92.             {                 
  93.                 requestDone = true;  
  94.                 var status;  
  95.                 try {  
  96.                     status = isTimeout != ”timeout” ? “success” : “error”;  
  97.                     // Make sure that the request was successful or notmodified  
  98.                     if ( status != “error” )  
  99.                     {  
  100.                         // process the data (runs the xml through httpData regardless of callback)  
  101.                         var data = jQuery.uploadHttpData( xml, s.dataType );  
  102.                         // If a local callback was specified, fire it and pass it the data  
  103.                         if ( s.success )  
  104.                             s.success( data, status );  
  105.       
  106.                         // Fire the global callback  
  107.                         if( s.global )  
  108.                             jQuery.event.trigger( ”ajaxSuccess”, [xml, s] );  
  109.                     } else  
  110.                         jQuery.handleError(s, xml, status);  
  111.                 } catch(e)   
  112.                 {  
  113.                     status = ”error”;  
  114.                     jQuery.handleError(s, xml, status, e);  
  115.                 }  
  116.   
  117.                 // The request was completed  
  118.                 if( s.global )  
  119.                     jQuery.event.trigger( ”ajaxComplete”, [xml, s] );  
  120.   
  121.                 // Handle the global AJAX counter  
  122.                 if ( s.global && ! –jQuery.active )  
  123.                     jQuery.event.trigger( ”ajaxStop” );  
  124.   
  125.                 // Process result  
  126.                 if ( s.complete )  
  127.                     s.complete(xml, status);  
  128.   
  129.                 jQuery(io).unbind()  
  130.   
  131.                 setTimeout(function()  
  132.                                     {   try   
  133.                                         {  
  134.                                             jQuery(io).remove();  
  135.                                             jQuery(form).remove();    
  136.                                               
  137.                                         } catch(e)   
  138.                                         {  
  139.                                             jQuery.handleError(s, xml, null, e);  
  140.                                         }                                     
  141.   
  142.                                     }, 100)  
  143.   
  144.                 xml = null  
  145.   
  146.             }  
  147.         }  
  148.         // Timeout checker  
  149.         if ( s.timeout > 0 )   
  150.         {  
  151.             setTimeout(function(){  
  152.                 // Check to see if the request is still happening  
  153.                 if( !requestDone ) uploadCallback( “timeout” );  
  154.             }, s.timeout);  
  155.         }  
  156.         try   
  157.         {  
  158.   
  159.             var form = jQuery(‘#’ + formId);  
  160.             jQuery(form).attr(’action’, s.url);  
  161.             jQuery(form).attr(’method’‘POST’);  
  162.             jQuery(form).attr(’target’, frameId);  
  163.             if(form.encoding)  
  164.             {  
  165.                 jQuery(form).attr(’encoding’‘multipart/form-data’);                 
  166.             }  
  167.             else  
  168.             {     
  169.                 jQuery(form).attr(’enctype’‘multipart/form-data’);              
  170.             }             
  171.             jQuery(form).submit();  
  172.   
  173.         } catch(e)   
  174.         {             
  175.             jQuery.handleError(s, xml, null, e);  
  176.         }  
  177.           
  178.         jQuery(’#’ + frameId).load(uploadCallback   );  
  179.         return {abort: function () {}};   
  180.   
  181.     },  
  182.       
  183.     /** handleError 方法在jquery1.4.2之后移除了,此处重写改方法 **/  
  184.     handleError: function( s, xhr, status, e ) {  
  185.         // If a local callback was specified, fire it  
  186.         if ( s.error ) {  
  187.             s.error.call( s.context || s, xhr, status, e );  
  188.         }  
  189.       
  190.         // Fire the global callback  
  191.         if ( s.global ) {  
  192.             (s.context ? jQuery(s.context) : jQuery.event).trigger( ”ajaxError”, [xhr, s, e] );  
  193.         }  
  194.     },  
  195.   
  196.     uploadHttpData: function( r, type ) {  
  197.           
  198.         //alert(“–>” + r.responseText);  
  199.         try{  
  200.             //debugger;  
  201.             var data = !type;  
  202.             data = type == ”xml” || data ? r.responseXML : r.responseText;  
  203.             // If the type is “script”, eval it in global context  
  204.             if ( type == “script” ){  
  205.                  jQuery.globalEval( data );  
  206.             }  
  207.                 
  208.             // Get the JavaScript object, if JSON is used.  
  209.             if ( type == “json” ){  
  210.                  /*** 如果返回的是字符串(JSON格式字符串),下面会报错,导致无法走入sucess方法 加上\”  ***/  
  211.                  // eval( “data = ” + data );  
  212.                  eval(”data = \” ”+data+“ \” ”);  
  213.             }  
  214.             // evaluate scripts within html  
  215.             if ( type == “html” ){  
  216.                 jQuery(”<div>”).html(data).evalScripts();  
  217.             }  
  218.         }catch(e) {  
  219.         }      
  220.         return data;  
  221.     }  
  222.       
  223.   
  224.               
  225. })  
jQuery.extend({    createUploadIframe: function(id, uri)    {            //create frame            var frameId = 'jUploadFrame' + id;            var iframeHtml = '<iframe id="' + frameId + '" name="' + frameId + '" style="position:absolute; top:-9999px; left:-9999px"';            if(window.ActiveXObject)            {                if(typeof uri== 'boolean'){                    iframeHtml += ' src="' + 'javascript:false' + '"';                }                else if(typeof uri== 'string'){                    iframeHtml += ' src="' + uri + '"';                }               }            iframeHtml += ' />';            jQuery(iframeHtml).appendTo(document.body);            return jQuery('#' + frameId).get(0);                },    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);        /*****    增加参数的支持   *****/         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;    },    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 = new Date().getTime();        // ADD  s.data        var form = jQuery.createUploadForm(id, s.fileElementId, s.data);        var io = jQuery.createUploadIframe(id, s.secureuri);        var frameId = 'jUploadFrame' + id;        var formId = 'jUploadForm' + id;                // Watch for a new set of requests        if ( s.global && ! jQuery.active++ )        {            jQuery.event.trigger( "ajaxStart" );        }                    var requestDone = false;        // Create the request object        var xml = {}           if ( s.global )            jQuery.event.trigger("ajaxSend", [xml, s]);        // Wait for a response to come back        var uploadCallback = function(isTimeout)        {                       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 a local callback was specified, fire it and pass it the data                        if ( s.success )                            s.success( data, status );                        // Fire the global callback                        if( s.global )                            jQuery.event.trigger( "ajaxSuccess", [xml, s] );                    } else                        jQuery.handleError(s, xml, status);                } catch(e)                 {                    status = "error";                    jQuery.handleError(s, xml, status, e);                }                // The request was completed                if( s.global )                    jQuery.event.trigger( "ajaxComplete", [xml, s] );                // Handle the global AJAX counter                if ( s.global && ! --jQuery.active )                    jQuery.event.trigger( "ajaxStop" );                // Process result                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(){                // Check to see if the request is still happening                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)            {                jQuery(form).attr('encoding', 'multipart/form-data');                           }            else            {                   jQuery(form).attr('enctype', 'multipart/form-data');                        }                       jQuery(form).submit();        } catch(e)         {                       jQuery.handleError(s, xml, null, e);        }        jQuery('#' + frameId).load(uploadCallback   );        return {abort: function () {}};     },    /** handleError 方法在jquery1.4.2之后移除了,此处重写改方法 **/    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] );        }    },    uploadHttpData: function( r, type ) {        //alert("-->" + r.responseText);        try{            //debugger;            var data = !type;            data = type == "xml" || data ? r.responseXML : r.responseText;            // If the type is "script", eval it in global context            if ( type == "script" ){                 jQuery.globalEval( data );            }            // Get the JavaScript object, if JSON is used.            if ( type == "json" ){                 /*** 如果返回的是字符串(JSON格式字符串),下面会报错,导致无法走入sucess方法 加上\"  ***/                 // eval( "data = " + data );                 eval("data = \" "+data+" \" ");            }            // evaluate scripts within html            if ( type == "html" ){                jQuery("<div>").html(data).evalScripts();            }        }catch(e) {        }            return data;    }})



原创粉丝点击