国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > AJAX > 正文

ajaxFileupload實現(xiàn)多文件上傳功能

2024-09-01 08:30:57
字體:
來源:轉載
供稿:網(wǎng)友

打開google 搜索"ajaxFileupload' ‘多文件上傳"可以搜到許許多多類似的,那我為什么還要寫一下呢?
一個是對之前大神的貢獻表示感謝;二個是自己知識的總結;三個是自己在原有的基礎上改動了下,在此記錄,可能幫助其他朋友。

用過這個插件的都知道這個插件的基本用法,我就不廢話,直接上代碼。

我需要實現(xiàn)多個文件上傳,之前的做法是定義多個不同id的input,然后把ajaxfileuplod方法放在for循環(huán)里,這個方法是在網(wǎng)上看到的,我覺得不怎么好,后面在網(wǎng)上找到的,就高級點了,直接改源碼(因為作者好久沒有跟新了,也確實滿足不了要求了)。接下來看看我是怎么改的。

引用網(wǎng)上的做法:

1、看沒有修改前的代碼

var oldElement = jQuery('#' + fileElementId); var newElement = jQuery(oldElement).clone(); jQuery(oldElement).attr('id', fileId); jQuery(oldElement).before(newElement); jQuery(oldElement).appendTo(form); 

很容易看出,這個就是把id為什么的input加到from里去,那么要實現(xiàn)多個文件上傳,就改成下面的樣子:

if(typeof(fileElementId) == 'string'){  fileElementId = [fileElementId]; } for(var i in fileElementId){  var oldElement = jQuery('#' + fileElementId[i]);  var newElement = jQuery(oldElement).clone();  jQuery(oldElement).attr('id', fileId);  jQuery(oldElement).before(newElement);  jQuery(oldElement).appendTo(form); } 

 這樣改之后,初始化的代碼就要這么寫:

$.ajaxFileUpload({  url:'/ajax.php',  fileElementId:['id1','id2']//原先是fileElementId:'id' 只能上傳一個 }); 

到這里,確實可以上傳多個文件,但是對于我來說新問題又來,多個id,我的界面的文件不是固定的,是動態(tài)加載的,那么id要動態(tài)生成,我覺得太麻煩,為什么不取name呢?然后把以上代碼改為如下:

if(typeof(fileElementId) == 'string'){    fileElementId = [fileElementId];   }   for(var i in fileElementId){    //按name取值    var oldElement = jQuery("input[name="+fileElementId[i]+"]");    oldElement.each(function() {     var newElement = jQuery($(this)).clone();     jQuery(oldElement).attr('id', fileId);     jQuery(oldElement).before(newElement);     jQuery(oldElement).appendTo(form);    });   } 

 這樣改了 那么就可以實現(xiàn)多組多個文件上傳,接下來看我是怎么應用的。

html:

<div>     <img id="loading" src="scripts/ajaxFileUploader/loading.gif" style="display:none;">          <table cellpadding="0" cellspacing="0" class="tableForm" id="calculation_model">       <thead>       <tr>        <th>多組多個文件</th>       </tr>       </thead>       <tbody>       <tr>        <td>第一組</td>        <td>第二組</td>       </tr>       <tr>        <td><input type="file" name="gridDoc" class="input"></td>        <td><input type="file" name="caseDoc" class="input"></td>       </tr>       </tbody>       <tfoot>       <tr>        <td><button class="button" id="up1">Upload</button></td>        <td><button class="button" id="addInput" >添加一組</button></td>       </tr>       </tfoot>      </table>    </div> 

js:

/**  * Created with IntelliJ IDEA.  * User: Administrator  * Date: 13-7-3  * Time: 上午9:20  * To change this template use File | Settings | File Templates.  */ $(document).ready(function () {  $("#up1").click(function(){   var temp = ["gridDoc","caseDoc"];   ajaxFileUpload(temp);  });   $("#addInput").click(function(){   addInputFile();  });  });  //動態(tài)添加一組文件 function addInputFile(){  $("#calculation_model").append(" <tr>"+   "<td><input type='file' name='gridDoc' class='input'></td> "+   "<td><input type='file' name='caseDoc' class='input'></td> "+   "</tr>"); }   //直接使用下載下來的文件里的demo代碼 function ajaxFileUpload(id) {  //starting setting some animation when the ajax starts and completes  $("#loading").ajaxStart(function(){    $(this).show();   }).ajaxComplete(function(){    $(this).hide();   });   /*   prepareing ajax file upload   url: the url of script file handling the uploaded files   fileElementId: the file type of input element id and it will be the index of $_FILES Array()   dataType: it support json, xml   secureuri:use secure protocol   success: call back function when the ajax complete   error: callback function when the ajax failed    */  $.ajaxFileUpload({    url:'upload.action',    //secureuri:false,    fileElementId:id,    dataType: 'json'   }  )   return false;  } 

我后臺是用的struts2,strtus2的上傳是比較簡單的,只要聲明約定的名字,即可得到文件對象,和名稱,代碼如下:

package com.ssy.action;  import com.opensymphony.xwork2.ActionSupport; import org.apache.commons.io.FileUtils; import org.apache.struts2.util.ServletContextAware;  import javax.servlet.ServletContext; import java.io.*; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random;  /**  * Created with IntelliJ IDEA.  * User: Administrator  * Date: 13-7-2  * Time: 下午4:08  * To change this template use File | Settings | File Templates.  */ public class Fileupload extends ActionSupport implements ServletContextAware {  private File[] gridDoc,caseDoc;  private String[] gridDocFileName,caseDocFileName;   private ServletContext context;      public String execute(){   for (int i = 0;i<gridDocFileName.length;i++) {    System.out.println(gridDocFileName[i]);   }   for (int i = 0;i<caseDocFileName.length;i++) {    System.out.println(caseDocFileName[i]);   }     //System.out.println(doc1FileName);   //System.out.println(doc2FileName);   String targetDirectory = context.getRealPath("/uploadFile");    /*    *這里我只取得 第一組的文件進行上傳,第二組的類似   */  try{    for (int i = 0; i < gridDoc.length; i++) {     String targetFileName = generateFileName(gridDocFileName[i]);     File target = new File(targetDirectory, targetFileName);     FileUtils.copyFile(gridDoc[i], target);    }   }catch (Exception e){    e.printStackTrace();   }     return SUCCESS;  }   public File[] getGridDoc() {   return gridDoc;  }   public void setGridDoc(File[] gridDoc) {   this.gridDoc = gridDoc;  }   public File[] getCaseDoc() {   return caseDoc;  }   public void setCaseDoc(File[] caseDoc) {   this.caseDoc = caseDoc;  }   public String[] getGridDocFileName() {   return gridDocFileName;  }   public void setGridDocFileName(String[] gridDocFileName) {   this.gridDocFileName = gridDocFileName;  }   public String[] getCaseDocFileName() {   return caseDocFileName;  }   public void setCaseDocFileName(String[] caseDocFileName) {   this.caseDocFileName = caseDocFileName;  }   /**   * 用日期和隨機數(shù)格式化文件名避免沖突   * @param fileName   * @return   */  private String generateFileName(String fileName) {   System.out.println(fileName);   SimpleDateFormat sf = new SimpleDateFormat("yyMMddHHmmss");   String formatDate = sf.format(new Date());   int random = new Random().nextInt(10000);   int position = fileName.lastIndexOf(".");   String extension = fileName.substring(position);   return formatDate + random + extension;  }  } 

寫到這里,我就有疑問了,之前的大神改的多文件,為什么還是取id,而且后臺是怎么取的,我還是沒怎么弄明白,我改的這個代碼可行么?是不是存在bug呢?這個還有待考驗,如果看出問題,請指出,共同學習 

最后附上,我修改后的插件

ajaxfileupload插件

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 哈尔滨市| 冕宁县| 华宁县| 潞城市| 郎溪县| 随州市| 乐亭县| 民勤县| 宜黄县| 扎鲁特旗| 尼木县| 文成县| 阜康市| 东乡县| 沁阳市| 遂溪县| 田林县| 南雄市| 万载县| 孟津县| 莲花县| 兖州市| 莱阳市| 固安县| 江达县| 蚌埠市| 黄龙县| 邵东县| 彩票| 新化县| 英吉沙县| 郑州市| 桃园县| 呼和浩特市| 华宁县| 辽阳市| 东莞市| 龙江县| 曲水县| 琼结县| 沧州市|