Uploadify是JQuery的一個上傳插件,實現的效果非常不錯,帶進度顯示。官方提供的實例是php版本的,您可以點擊下面的鏈接進行瀏覽或下載。
效果圖:
部署和代碼介紹:
JSP前台頁面:
<script type="text/javascript">
$(document).ready( function() {
$("#uploadify").uploadify( {//初始化函數
'uploader' :'uploadify.swf',//flash文件位置,注意路徑
'script' :'servlet/Upload',//后台處理的請求
'cancelImg' :'images/cancel.png',//取消按鈕圖片
'folder' :'uploads',//您想將文件保存到的路徑
'queueID' :'fileQueue',//與下面的上傳文件列表id對應
'queueSizeLimit' :8,//上傳文件的數量
'scriptData':{'a':'value1','b':'value2'},//向后台傳的數據
'fileDesc' :'rar文件或zip文件',//上傳文件類型說明
'fileExt' :'*.rar;*.zip', //控制可上傳文件的擴展名,啟用本項時需同時聲明fileDesc
'method':'get',//如果向后台傳輸數據,必須是get
'sizeLimit':1000,//文件上傳的大小限制,單位是字節
'auto' :false,//是否自動上傳
'multi' :true,
'simUploadLimit' :2,//同時上傳文件的數量
'buttonText' :'BROWSE',//瀏覽按鈕圖片
'onComplete': function(event, queueID, fileObj,serverData,data) {//當上傳完成后的回調函數,ajax方式哦~~
alert(data.speed);
}
});
});
</script>
<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="js/swfobject.js"></script>
<script type="text/javascript" src="js/jquery.uploadify.v2.1.0.min.js"></script>
<div id="fileQueue"></div>
<input type="file" name="uploadify" id="uploadify" />
<p>
<a href="javascript:jQuery('#uploadify').uploadifyUpload()">開始上傳</a>
<a href="javascript:jQuery('#uploadify').uploadifyClearQueue()">取消所有上傳</a>
</p>
java后台:
String savePath = this.getServletConfig().getServletContext().getRealPath("");
savePath = savePath + "/uploads/";
File f1 = new File(savePath);
System.out.println(savePath);
if (!f1.exists()) {
f1.mkdirs();
}
DiskFileItemFactory fac = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(fac);
upload.setHeaderEncoding("utf-8");
List fileList = null;
try {
fileList = upload.parseRequest(request);
} catch (FileUploadException ex) {
ex.printStackTrace();
return;
}
Iterator it = fileList.iterator();
while (it.hasNext()) {
FileItem item = (FileItem) it.next();
if (!item.isFormField()) {
name = item.getName();
long size = item.getSize();
String type = item.getContentType();
if (name == null || name.trim().equals("")) {
continue;
}
// 擴展名格式:
if (name.lastIndexOf(".") >= 0) {
extName = name.substring(name.lastIndexOf("."));
}
File file = null;
do {
// 生成文件名:
name = UUID.randomUUID().toString();
file = new File(savePath + name + extName);
} while (file.exists());
File saveFile = new File(savePath + name + extName);
try {
item.write(saveFile);
} catch (Exception e) {
e.printStackTrace();
}
}
}
response.getWriter().print(name + extName);
代碼很好懂,不講解了。
下面是官方英文文檔的一些翻譯。此文檔是2.14版本的,現在出了3.0版本,屬性和事件名稱有改變,注意參考JS文件
Uploadify屬性
| 屬性名 | 類型 | 說明 |
| auto | boolean | 添加到隊列后自動上傳 |
| buttonImg | string | 瀏覽按鈕的背景圖片 |
| buttonText | string | 瀏覽按鈕的顯示文字 |
| cancelImg | string | 取消上傳按鈕的圖片 |
| checkScript | string | 服務端用來檢查文件是否重名的腳本 |
| displayData | string | 上傳時顯示的提示(percentage百分比/speed速度) |
| expressInstall | string | 安裝swf的文件(expressInstall.swf)路徑 |
| fileDataName | string | 重定義的input的名稱(后台) |
| fileDesc | string | 文件打開對話框中的文件類型描述 |
| fileExt | string | 可允許上傳的文件類型 |
| folder | string | 文件存儲的文件夾 |
| height | integer | 瀏覽按鈕的高度 |
| hideButton | boolean | 是否隱藏瀏覽按鈕 |
| method | string | 表單提交方式(post/get) |
| multi | boolean | 是否允許上傳多個文件 |
| queueID | string | 上傳隊列的元素的ID |
| queueSizeLimit | integer | 上傳隊列大小 |
| removeCompleted | boolean | 完成上傳時是否自動刪除 |
| rollover | boolean | 當鼠標移上時產生特效 |
| script | string | 上傳表單提交的目標腳本 |
| scriptAccess | string | swf的文件地址 |
| scriptData | JSON | 提交給后台的附加信息 |
| simUploadLimit | integer | 同時可上傳的文件實例數 |
| sizeLimit | integer | 每文件的最大大小 |
| uploader | string | uploadify上傳的swf文件路徑 |
| width | integer | 瀏覽按鈕的寬度 |
| wmode | string | flash文件的wmode模式 |
Uploadify事件
| 事件名 | 參數 | 說明 |
| onAllComplete | function(event,data) | 當所有文件上傳完畢時觸發 |
| onCancel | function(event,ID,fileObj,data) | 當某文件被取消上傳時觸發 |
| onCheck | function() | 當開始上傳時檢查是否重名 |
| onClearQueue | function(event) | 當執行uploadifyClearQueue()后執行 |
| onComplete | function(event, ID, fileObj, response, data) | 當某文件上傳完畢時觸發 |
| onError | function(event,ID,fileObj,errorObj) | 當上傳時有錯誤返回時觸發 |
| onInit | function() | 當uploadify實例加載完畢時觸發 |
| onOpen | function(event,ID,fileObj) | 當某文件開始上傳時觸發 |
| onProgress | function(event,ID,fileObj,data) | 當某文件上傳進度改變時觸發 |
| onQueueFull | function(event,queueSizeLimit) | 當上傳隊列達到限制時觸發 |
| onSelect | function(event,ID,fileObj) | 每個文件被添加到上傳隊列時觸發 |
| onSelectOnce | function(event,data) | 一次文件被添加到上傳隊列時觸發 |
| onSWFReady | function() | 當flash加載完畢時觸發 |
Uploadify方法
| 方法名 | 說明 |
| .uploadify() | 創建Uploadify的實例 |
| .uploadifyCancel() | 從上傳隊列中移除一個文件 |
| .uploadifyClearQueue() | 清空上傳隊列 |
| .uploadifySettings() | 修改Uploadify實例的屬性 |
| .uploadifyUpload() | 觸法文件上傳 |

