ajaxFileUpload使用Struts2实现多文件上传


jsp:

<form id="importClearNoticeForm"  enctype="multipart/form-data">
        <table class="qtable" width="100%"  cellspacing="1" cellpadding="1" >
            <tr >
                <td class="flabel">请选择要上传的<i style="color: red">文件1i>td>
                <td class="finput"><input id="checkFiles1" type="file" name="checkFiles"/> td>
            tr>
            <tr>
                <td class="flabel">请选择要上传的<i style="color: red">文件2i>td>
                <td class="finput"><input id="checkFiles2" type="file" name="checkFiles"/> td>
            tr>
        table>
    form>

js:

$.ajaxFileUpload({
   url:'reportCheck.action',
   secureuri:false,
  //上传文件框的id属性 fileElementId:['checkFiles1','checkFiles2'], dataType: 'json', success:function (data, status){   $('#importClearNotice').dialog('close'); if(data.success){ $('#importClearNotice').dialog('close'); //将结果回显到表格 $("#resultTableDiv").html(""); $("#resultTableDiv").append(resultTable(data)); alert("核对完成!"); }else { alert(data.syserr); } } });

ajax默认只支持单文件上传,即js中标红的地方只能传fileElementId:'checkFiles1',此处重点说明多文件上传。

因此需要修改ajaxfileupload.js文件,使其支持多文件上传。

由于使用的版本不一样,ajaxfileupload.js中的变量是不一样的,但是原理都一样,只需照猫画虎就可以!!!

下面标红的地方即为修改的地方,这样就可以支持单文件上传和多文件上传。

ajaxfileupload.js:

createUploadForm: function(g, b) {
        var e = "jUploadForm" + g;
        var a = "jUploadFile" + g;
        var d = $('<form  action="" method="POST" name="' + e + '" id="' + e + '" enctype="multipart/form-data">form>');
     //判断类型,如果是字符串按单文件上传 if(typeof(b)=='string'){ var c = $("#" + b); var f = $(c).clone(); $(c).attr("id", a); $(c).before(f); $(c).appendTo(d); }
     //如果是数组则按多文件上传 if(Array.isArray(b)){ for(var i in b){ var c = $('#' + b[i]); var f = $(c).clone(); $(c).attr('id', a); $(c).before(f); $(c).appendTo(d); } } $(d).css("position", "absolute"); $(d).css("top", "-1200px"); $(d).css("left", "-1200px"); $(d).appendTo("body"); return d }

接下来就是struts2文件上传的配置

<action name="reportCheck" class="com.wlv1314.AjaxFileUploadAction" method="reportCheck">
            <interceptor-ref name="sessionTimeOutInp" />
            <interceptor-ref name="fileUploadStack" />
            <interceptor-ref name="exceptionInterceptor" />
action>
AjaxFileUploadAction:
以下为多文件上传,单文件的话只需将类型调整为不是数组就可以。
    //文件名命名规则为xxxFileName,xxx为接收文件的属性
    private File[] checkFiles;
private String[] checkFilesFileName;public File[] getCheckFiles() { return checkFiles; } public void setCheckFiles(File[] checkFiles) { this.checkFiles = checkFiles; } public String[] getCheckFilesFileName() { return checkFilesFileName; } public void setCheckFilesFileName(String[] checkFilesFileName) { this.checkFilesFileName = checkFilesFileName; }

//接收文件action
    public String reportCheck() throws Exception{
File[] checkFiles = this.checkFiles;
String[] checkFilesFileName = this.checkFilesFileName;
     //这样就能获取到上传的多个文件了
    }

然后就可以愉快的操作上传的多个文件了!!!