天天看點

多檔案上傳成功----fileuploader

該插件支援https+ff,網上n多插件都不支援https+ff,而且很多用的都是flash,內建複雜;

File Uploader的前身是Ajax Upload。按照官方的說法,更新到FileUploader主要是添加了一些新的特性,修正了一些比較嚴重的錯誤。但在我這個使用者看來,二者最大的 不同在于:File Uploader不在基于jQuery。另外,File Uploader也更加嚴格,例如傳回值隻能是JSON格式,等。Ajax Upload中一些需要寫到背景伺服器上的代碼(如上傳檔案的格式篩選),或者對前端DOM的操作(如onSubmit、onComplete事件中自定 義的代碼等),都直接內建到了File Uploader的JS腳本中。總的說來,File Uploader是一款功能強大的JS檔案上傳插件,支援顯示上傳進度、檔案拖拽到浏覽器中上傳、多檔案上傳、頁面無重新整理、無序多餘插件、跨浏覽器、跨後 台語言等等特性。

官方網站如下:

http://valums.com/ajax-upload/

下載下傳的檔案目錄結構如下圖所示:

多檔案上傳成功----fileuploader

其中可供使用的是client目錄和server目錄下的若幹檔案:

client目錄

fileuploader.js:主要JS腳本檔案,前端的所有功能都在該腳本中實作。必需。使用時需要通過<script>标簽導入到HTML檔案中;

fileuploader.css:提供JS腳本中所需的CSS樣式,主要包括按鈕的樣式、進度顯示的樣式以及上傳結果的樣式。必需。需要通過<link>标簽導入HTML檔案中;

loading.gif:進度顯示所需的動态圖檔檔案。必需。在fileuploader.css檔案中被調用。

server目錄

該目錄提供的是伺服器端代碼的示例程式,包括:

基于Servlet實作的Java代碼:OctetStreamReader.java

基于PHP的實作:php.php

基于Perl的實作:perl.cgi

三者擇其一即可。

下面這段代碼是前端對File Uploader最簡單的調用:

[html] view plain copy

  1. <!DOCTYPE html PUBLIC "-//W3C//DTDXHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type"content="text/html; charset=utf-8" />  
  5. <title>file uploader</title>  
  6. <script type="text/javascript"src="fileuploader.js"></script>  
  7. <link rel="stylesheet"type="text/css" href="fileuploader.css"/>  
  8. <script type="text/javascript">  
  9. window.onload = function() {  
  10.     new qq.FileUploader({  
  11.             element:document.getElementById("uploader"),  
  12.             action:"http://localhost/fileUpload/save.php",  
  13.         });  
  14. }  
  15. </script>  
  16. </head>  
  17. <body>  
  18. <div id="uploader"></div>  
  19. </body>  
  20. </html>  

前端的一般的步驟是:

1.      導入fileuploader.js、fileuploader.css腳本;

2.      執行個體化qq.FileUploader對象

qq.FileUploader的參數數組中包含如下屬性:

element:加載FileUploader插件的DOM元素,通過DOM操作擷取,通常是<div>,也可以是任何塊級元素标簽,如<span>、<p>等,必需;

action:伺服器端接受并儲存檔案的程式路徑,與<form>标簽中的action屬性類似,必需;

params:需要發送給伺服器端的額外資料,key-value格式的數組,通過POST方法發送,格式如下:

params:  {

        param1: “value1”,

        param2: “value2”

}

allowedExtensions:允許上傳的檔案的字尾名數組,格式如下:

allowedExtensions:  [‘jpg’,  ‘gif’,  ‘bmp’,  ‘png’]

sizeLimit:上傳檔案大小的上限,機關為byte的數值(浏覽器不一定支援本設定);

minSizeLimit:上傳檔案大小的下限,機關為byte的數值(浏覽器同樣不一定支援);

debug:是否使用浏覽器的控制台列印File Uploader的調試資訊,預設為false;

另外,參數數組中還包含了4個事件處理函數可供實作(非必需):

檔案送出:onSubmit:  function(id,  fileName)  {}

正在上傳:onProgress:  function(id,  fileName,  loaded,  total)  {}

上傳完成:onComplete:  function(id,  fileName,  responseJSON)  {}

取消上傳:onCancel:  function(id,  fileName)  {}

其中的參數:

id,表示是第幾個上傳的檔案,從0開始計數;

fileName,表示上傳的檔案名稱;

loaded,表示已經上傳了的資料大小;

total,表示總共的檔案大小;

responseJSON,表示傳回的JSON資料。

參數數組中還包含了消息處理函數以及params的其它設定方法,不太常用,詳情頁參見官方文檔。

背景伺服器端如果想省事,可以直接使用server目錄下的相應代碼,或按照官方給的示例改寫代碼。

需要特别說明的是:

1.      加載FileUploader插件的DOM元素element,其樣式在腳本中已經固定了,就算是在給element設定了新的樣 式也會被覆寫掉。如果想修改element的樣式,需要在fileuploader.js的487行到491行(template處)以及對應的 fileuploader.css樣式中修改。

2.      同理,如果想修改進度顯示的樣式,需要在fileuploader.js的494行到500行(fileTemplate處)以及對應的fileuploader.css樣式中修改。

3.      如果出現“increase post_max_size and upload_max_filesize to 10M”錯誤,需要在php.ini檔案中把post_max_size和upload_max_filesize兩項的值改到10M以上,然後重新開機 Apache。

4.      FileUploader上傳的檔案資料資訊,Java通過HttpServletRequest對象擷取,并能直接從中抽取資料 流,不用管索引值;而PHP則通過$_FILES數組擷取,預設的索引值為“qqfile”,該索引值在fileuploader.js檔案的964行與 1197行指定,也可以在這些地方修改(雖然沒有必要)。

5.      伺服器端代碼中設定檔案儲存路徑的位置:PHP:php.php檔案的第160行;Java:OctetStreamReader.java檔案的第102行。

繼續閱讀