該插件支援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/
下載下傳的檔案目錄結構如下圖所示:
其中可供使用的是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
- <!DOCTYPE html PUBLIC "-//W3C//DTDXHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type"content="text/html; charset=utf-8" />
- <title>file uploader</title>
- <script type="text/javascript"src="fileuploader.js"></script>
- <link rel="stylesheet"type="text/css" href="fileuploader.css"/>
- <script type="text/javascript">
- window.onload = function() {
- new qq.FileUploader({
- element:document.getElementById("uploader"),
- action:"http://localhost/fileUpload/save.php",
- });
- }
- </script>
- </head>
- <body>
- <div id="uploader"></div>
- </body>
- </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行。