使用ajaxFileUpload上传文件流至服务器,同时提交多个参数

来源:互联网 发布:java输入输出流考题 编辑:程序博客网 时间:2024/05/16 14:50

1.前端界面引入如下两个js文件,注意引入顺序,因为ajaxfileupload会用到jquery,所以jquery应该先引入

<script type="text/javascript" src="/js/jquery.min.js"></script><script type="text/javascript" src="/js/open/ajaxfileupload.js"></script>

 

<tr>   <td>申请单号:</td>   <td colspan="7"><input class="common-text required" type="text"      name="applyNo" id="applyNo"></input></td><!--提交文件流的时候,同时提交参数--></tr><tr>      <td>合同文件:</td>       <td><input type="file" id="filePath" name="filePath"></td>
<!--注意input的类型和name属性-->
</tr>
2.修改ajaxfileupload.js成如下
jQuery.extend({      createUploadIframe: function(id, uri)      {              //create frame              var frameId = 'jUploadFrame' + id;                            if(window.ActiveXObject) {                  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 = $('<form  action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');           var oldElement = $('#' + fileElementId);          var newElement = $(oldElement).clone();          $(oldElement).attr('id', fileId);          $(oldElement).before(newElement);          $(oldElement).appendTo(form);                    //增加文本参数的支持          if (data) {              for (var i in data) {                  $('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form);              }          }                    //set attributes          $(form).css('position', 'absolute');          $(form).css('top', '-1200px');          $(form).css('left', '-1200px');          $(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()                  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                                           {                                              $(io).remove();                                              $(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 io = $('#' + frameId);              var form = $('#' + formId);              $(form).attr('action', s.url);              $(form).attr('method', 'POST');              $(form).attr('target', frameId);              if(form.encoding)              {                  form.encoding = 'multipart/form-data';                            }              else              {                                 form.enctype = 'multipart/form-data';              }                         $(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);          }                 return {abort: function () {}};         },        uploadHttpData: function( r, type ) {          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" )              eval( "data = " + data );          // evaluate scripts within html          if ( type == "html" )              jQuery("<div>").html(data).evalScripts();              //alert($('param', data).each(function(){alert($(this).attr('value'));}));          return data;      }  })  
3.js中调用ajaxFileUpload举例
     
$.ajaxFileUpload({   type : "post",   url : "/test/lhpContractUpload",//后台接收url    secureuri:false,    fileElementId: 'filePath',//file标签的id,name   data : {      "applyNo":applyNo   },   dataType : "json",   success : function(data) {      $("#lhpContractUpload").show().html(data);   }});
4.后台接收处理
 
public String lhpContractUpload(String applyNo,@RequestParam(value = "filePath") MultipartFile file){    try {        InputStream io = file.getInputStream();//获取输入文件流        return  openService.lhpContractUpload(applyNo,io);    } catch (IOException e){        e.printStackTrace();    }    return "上传失败";}

0 0
原创粉丝点击