SWFUpload 最初是Vinterwebb.se 開發的客戶端文件上傳工具。它聯合javascript和flash,在瀏覽器中提供一個優於傳統上傳標籤 <input type="file" /> 的功能(和良好的用戶體驗)。javascript
SWFUpload 的主要特性:php
SWFUpload 的設計理念與其餘基於flash的上傳工具不一樣。SWFUpload 給開發者儘量多的UI控制能力. 開發者可使用 XHTML, CSS, JavaScript 來使它更符合本身網站的樣式風格. 它提供一組簡單的js事件更新上傳狀態,開發者能夠根據這些事件來在網頁中顯示文件上傳進度css
不過不幸的是 Flash Player 10 迫使咱們不得不用一個按鈕(點擊後)才能觸發文件選擇對話框,但SWFUpload容許開發者用js來修改這個按鈕的文字等外觀。html
SWFUpload v2 包含了許多新的特性,加強的穩定性,解決了Flash Player 中的一些bug,提供了一些有用的插件(Plug-ins). 新特性包括:前端
標準的HTML上傳框只提供一個按鈕和一個文本框讓用戶選擇單個文件。而後經過表單提交。整個文件必須等到它上傳完畢後才能確認並檢查文件大小,文件擴展名,並且上傳的過程當中,回傳反饋不多。這就形成了一些使用上的不便利。java
但傳統的HTML上傳十分簡單,單一步驟,全部瀏覽器都支持它。linux
SWFUpload 使用Flash 影片(flash movie) 來選擇和上傳文件。影片裏有一個可定製的按鈕來激活文件選擇對話框。文件選擇對話框容許用戶選擇單一的文件或者多個文件。 選擇的的文件類型也是能夠被限制的,開發人員能夠限定用戶只能選擇指定的適當的文件,例如*.jgp;*.gif。web
一旦選擇並點擊肯定,每一個文件都會被驗證,並放入隊列。當Flash上傳文件的時候,由開發人員預約義的Javascript事件會被觸發以便來更新頁面中的UI顯示,而且還能實時提供上傳狀態和錯誤信息。apache
文件的上傳是獨立於頁面和表單的。每一個文件單獨的上傳處處理頁面,這就使服務器能夠簡單輕鬆地處理文件。flash提供的上傳服務使得整個頁面沒必要提交或者刷新。這有點像AJAX程序。頁面中的Form表單數據會和FLASH控制的文件上傳單獨處理。windows
SWFUpload 不是拖放式的上傳控件。所以須要一些dom和js的知識。幾個demo將會展現swfUpload的能力以及如何使用它們完成任務。
SWFUpload 包含4部分:
許多使用 SWFUpload 的問題都出在設置上。錯誤的事件處理, Flash/瀏覽器的Bug,或者服務器配置。
SWFUpload 必須在頁面上初始化.它一般在js的window.onload事件裏完成. SWFUpload 的構造函數須要獲取一個Object類型的對象(js). 這個對象的數據直接的傳遞給構造函數.
初始化的SWFUpload對象的引用(reference)應該保存好,(yukon:即用變量存儲起來.如例子中的swfu)由於在啓動文件上傳以及控制其餘特性的時候也須要這個引用。
例子:初始化SWFUpload時直接傳入一個匿名對象來配置參數
var swfu; window.onload = function () { swfu = new SWFUpload({ upload_url : "http://www.swfupload.org/upload.php", //處理上傳文件的地址 flash_url : "http://www.swfupload.org/swfupload.swf", //核心功能swf的地址 flash9_url : "http://www.swfupload.org/swfupload_fp9.swf", file_size_limit : "20 MB" //文件大小限制 }); };
例子: 也能夠在初始化SWFUpload時使用一個對象變量(settings_object)傳入配置參數
var swfu; window.onload = function () { var settings_object = { upload_url : "http://www.swfupload.org/upload.php", flash_url : "http://www.swfupload.org/swfupload.swf", flash9_url : "http://www.swfupload.org/swfupload_fp9.swf", file_size_limit : "20 MB" }; swfu = new SWFUpload(settings_object); };
若是想使用swfupload, js庫文件(swfupload.js) 必須被引入到使用的頁面中.
一旦 SWFUpload 對象被建立,就能夠訪問許多功能函數。開發者能夠以此來控制SWFUpload。
例: 如何引入swfupload.js庫
<script type="text/javascript" src="http://www.swfupload.org/swfupload.js"></script>
例: 按需初始化 SWFUpload.
var swfu = new SWFUpload({ upload_url : "http://www.swfupload.org/upload.php", flash_url : "http://www.swfupload.org/swfupload.swf", flash9_url : "http://www.swfupload.org/swfupload_fp9.swf", button_placeholder_id : "spanSWFUploadButton" //yukon:這裏有個新參數,將會使用js在id爲「spanSWFUploadButton」的標籤容器如span,div中建立一個「選擇」按鈕 });
SWFUpload js庫能動態的加載 Flash 控件 (swfupload.swf 或 swfupload_fp9.swf).
Flash控件的文件地址在初始化的時候就必須在SWFUpload設置對象中定義。
Flash控件其實是個Flash小影片,它能夠控制文件的選擇,驗證和上傳。
它在頁面中展示給用戶的是一個UI可自定製的按鈕,而且能檢測Flash Player的版本(9,10)自動加載適合用戶播放器版本的flash控件
使用 flash_url 和 flash9_url 能夠設置swfupload.swf 或者 swfupload_fp9.swf 的路徑。(yukon:前面幾個例子已經有寫了)
開發者必須建立一組js函數來處理SWFUpload的事件. 當各類重要的事件發生的時候,這些函數會被觸發執行。
經過處理SWFUpload的事件,開發人員可以提供關於上傳進度、出錯信息以及上傳完成等的信息反饋。注意:開發人員不要重寫了存儲在SWFUpload.prototype的函數。
例: SWFUpload事件處理和初始化.
// 上傳開始(uploadStart)事件處理函數. 設置對象的「upload_start_handler」屬性的值應是此函數的名字 var myCustomUploadStartEventHandler = function (file) { var continue_with_upload; if (file.name === "the sky is blue") { continue_with_upload = true; } else { continue_with_upload = false; } return continue_with_upload; }; // 上傳成功( uploadSuccess )事件處理函數. 設置對象的「upload_success_handler」屬性的值應是此函數的名字 var myCustomUploadSuccessEventHandler = function (file, server_data, receivedResponse) { alert("The file " + file.name + " has been delivered to the server. The server responded with " + server_data); }; // Create the SWFUpload Object var swfu = new SWFUpload({ upload_url : "http://www.swfupload.org/upload.php", flash_url : "http://www.swfupload.org/swfupload.swf", flash9_url : "http://www.swfupload.org/swfupload_fp9.swf", file_size_limit : "200 MB", upload_start_handler : myCustomUploadStartEventHandler, upload_success_handler : myCustomUploadSuccessEventHandler
SWFUpload(settings object) //SWFUpload(設置對象)
返回: 一個SWFUpload 實例
var swfupload_instance = new SWFUpload(settings_object);
SWFUpload定義了一些全局變量和常量,這對SWFUpload的高級應用和處理錯誤都是頗有用的,它們都是隻讀的。
SWFUpload.instances 是存貯着一個頁面中全部SWFUpload實例引用的數組對象。Flash Player依靠這個對象數組來調用正確的事件處理函數。SWFUpload.instances對象數組的索引(SWFUpload.instances[index])是屬性movieName。
SWFUpload.movieCount 是一個全局變量,記錄頁面中已建立了多少個SWFUpload對象實例,並用來確保每一個flash影片均被賦予一個惟一的movieName.
SWFUpload.QUEUE_ERROR 是一個簡單的js對象,包含了隊列錯誤碼(Queue Error code)的常量。用來決定當文件隊列錯誤(fileQueueError)發生時,將發送什麼錯誤碼。
SWFUpload.QUEUE_ERROR = { QUEUE_LIMIT_EXCEEDED : -100, FILE_EXCEEDS_SIZE_LIMIT : -110, ZERO_BYTE_FILE : -120, INVALID_FILETYPE : -130 };
SWFUpload.UPLOAD_ERROR 也是一個簡單的js數組對象,它包含了上傳錯誤碼常量(Upload Error code constants).用來決定當上傳錯誤(uploadError)事件發生時發送什麼錯誤碼.
SWFUpload.UPLOAD_ERROR = { HTTP_ERROR : -200, MISSING_UPLOAD_URL : -210, IO_ERROR : -220, SECURITY_ERROR : -230, UPLOAD_LIMIT_EXCEEDED : -240, UPLOAD_FAILED : -250, SPECIFIED_FILE_ID_NOT_FOUND : -260, FILE_VALIDATION_FAILED : -270, FILE_CANCELLED : -280, UPLOAD_STOPPED : -290 };
SWFUpload.FILE_STATUS 是一個js數組對象,包含了文件狀態碼常量( File Status code constants). 用來檢測File對象的屬性file status
SWFUpload.FILE_STATUS = { QUEUED : -1, IN_PROGRESS : -2, ERROR : -3, SUCCESS : -4, CANCELLED : -5 };
SWFUpload.UPLOAD_TYPE 是一個js數組對象,包含了上傳類型常量(Upload Type constants). 用於檢測File對象的上傳類型屬性( upload type property)
SWFUpload.BUTTON_ACTION 是一個js數組對象,包含了按鈕動做碼常量(button action code constants). 用於按鈕動做(button_action)的值設置,從而可設置flash影片中的那個交互式按鈕對各類鼠標動做的的相關響應.
SWFUpload.BUTTON_ACTION = { SELECT_FILE : -100, SELECT_FILES : -110, START_UPLOAD : -120 }
SWFUpload.CURSOR 是一個js數組對象,包含了按鈕光標常量。用於按鈕光標 (button_cursor)的值的設置,從而改變鼠標指向按鈕時,鼠標的樣式。
SWFUpload.CURSOR = { ARROW : -1, HAND : -2 }
SWFUpload.WINDOW_MODE 是一個js數組對象,包含了按鈕影片窗口模式參數常量(button movie wmode parameter constants). 用於告訴瀏覽器如何呈現flash影片。
有些 WINDOW_MODE/WMODE 設置會致使一些瀏覽器問題 具體請看 Known Issues.
SWFUpload.WINDOW_MODE = { WINDOW : "window", TRANSPARENT : "transparent", OPAQUE : "opaque" };
SWFUpload.RESIZE_ENCODING 是一個js數組對象,包含了大小調整類型常量( resize encoding type constants).用以指出被大小調整的圖片的編碼格式
onload 是一個能夠經過swfobject的addDOMLoadEvent方法執行的函數. 你經過這個方法,在頁面加載完畢以後能夠執行你的腳本程序。不過你應該肯定你沒有使用其餘相似的方法 (好比 jQuery框架的 「Ready」 或者 Prototype庫中的 dom:loaded).
SWFUpload.onload = function () { new SWFUpload(settingsObject); }
上面一個例子將在最先的瀏覽器加載事件中初始化SWFUpload。大多DOM準備完畢事件(DOMReady event)的執行時緊隨window.onload事件以後。
請遵循下面的屬性列表描述來使用這些屬性。若是把錯誤的使用一個只讀或只寫屬性屬性,將會致使SWFUpload錯誤.
「自定義設置」屬性( customSettings)是一個js空對象。用以存儲與一個SWFUpload實例有關的數據。 它的內容可使用設置對象中的custom_settings屬性來初始化。
Example:
// 初始化 SWFUpload 對象時使用一些自定義設置 var swfu = new SWFUpload({ custom_settings : { custom_setting_1 : "custom_setting_value_1", custom_setting_2 : "custom_setting_value_2", custom_setting_n : "custom_setting_value_n", } }); swfu.customSettings.custom_setting_1 = "custom_setting_value_1"; // 改變一個已有的自定義設置 swfu.customSettings.myNewCustomSetting = "new custom setting value"; // 添加一個新的自定義設置 // 用一個全新的對象來重寫自定義設置 swfu.customSettings = { custom_setting_A : "custom_setting_value_A", custom_setting_B : "custom_setting_value_B" };
存儲在自定義設置對象(customSettings object)的值能夠輕鬆地被事件處理函數訪問:(yukon:這個屬性是利用js的動態特性,給開發者高度的開發自由)
function uploadSuccess(file, serverData, receivedResponse) { if (this.customSettings.custom_setting_A === true) { alert("Checked the custom setting!"); } }
包含了某SWFUpload實例的惟一標示名. 這個值可傳遞給Flash,以幫助as-js之間的交互。用於索引存儲在SWFUpload.instances數組的實例. 你不該該也不能改變它。
下面的方法用於操做SWFUpload. 有些方法能夠與DOM元素的單擊事件綁定,其它的方法供SWFUpload內部處理事件中調用。
不同意使用 The addSetting function sets a setting value. If the value is undefined then the default_value is used. The function is used by SWFUpload
addSetting returns the value that was stored in the setting.
不同意使用 The getSetting function retrieves the value of a setting. If the setting is not found an empty string is returned.
在 v2.1.0 中移除 The retrieveSetting function is similar to the addSetting function except it does not modify the internal settings object. retrieveSetting returns the setting_value unless it is undefined in which case it returns the default_value
This is a utility function.
自 v2.1.0 添加
移除一個SWF的DOM元素,而且銷燬SWFUpload的內部引用. 用以完全刪除頁面中的一個SWFUpload實例. 防止在ie中的內存泄露問題
若是成功移除,返回true,若是出現任何致使SWFUpload實例的狀態出現錯誤的問題,將返回false(Returns false if any error occurs leaving the SWFUpload instance in an inconsistent state).
在debug事件中displayDebugInfo()輸出SWFUpload 設置. 若是在初始化時候debug setting被設置爲true,這個函數會被自動的調用。
不推薦. 不兼容 Flash Player 10.
selectFile causes the Flash Control to display a File Selection Dialog window. A single file may be selected from the Dialog window.
Calling selectFile begins the File Event Chain.
不推薦. 不兼容Flash Player 10.
selectFiles causes the Flash Control to display a File Selection Dialog window. A multiple files may be selected from the Dialog window.
Calling selectFiles begins the File Event Chain.
startUpload接收file_id來上傳文件。若是不傳給它file_id值,那麼將默認上傳待上傳隊列的第一個文件
調用startUpload會觸發上傳事件鏈 (the Upload Event Chain).
startResizedUpload 接收file_id參數來上傳文件. SWFUpload嘗試調整文件長寬等設置(若是是flash支持的圖片格式) .若是圖片格式不被支持,會引起一個上傳錯誤(uploadError).
width和height參數用來設定圖片最大寬和高。但調整過程當中會保持圖片寬高比。
encoding的值必須是是存在SWFUpload.RESIZE_ENCODING中的常量.
quality 只能用於調節JPEG格式圖像的品質。接收範圍是0-100。若是在這個範圍外,會強制成0或100.
allowEnlarging參數定義了SWFUpload是否容許將原圖像擴大。(默認爲true)若是原圖像的長寬小於前面所說的width和height。若是設置其值爲false的話,圖像仍然會被編碼,但不會將它擴大。
調用startResizedUpload方法會引起一個普通的上傳事件鏈鎖 . 可是Flash Player不會定時地提供 uploadProgress 事件. SWFUpload只會發送 模擬 0% 和 100% 的上傳過程事件(uploadProgress events).
被調節大小的圖片以POST方式傳遞數據,(而不是像FILE那樣) 由於Flash Player 10引入了安全特性 .附帶調整圖片大小功能的上傳的php處理頁面和普通的上傳php處理頁面有所不一樣:
$resizedImageData = $_POST["Filedata"]; // 服務器端以$_POST方式接收數據而不是 $_FILE $fileHandle = fopen("image.jpg", "w"); //以file系列操做函數來存儲圖片 fwrite($fileHandle, $resizedImageData); fclose($fileHandle);
cancelUpload接收file_id 參數來移除一個文件的上傳.這個文件會被移除出待上傳隊列 .
若是不給它file_id,默認上傳隊列中的第一個文件將會被取消.
可選參數trigger_error_event若是被設置爲false,uploadError事件將不會被觸發.
stopUpload中止當前正在上傳的文件,而且把它還原到待上傳隊列中。(yukon:和移除不一樣,就是取消這個文件的上傳,但不會移除出上傳隊列)
調用stopUpload時,若是有正在上傳的文件,uploadError事件會被觸發;若是此時沒有正在上傳文件,那麼不會發生任何操做,也不會觸發任何事件。
requeueUpload將以前曾經入隊的文件從新加入等待上傳隊列
若是文件沒有找到,或者正在被上傳,會返回false
注意:被從新入隊的文件不會被再一次檢查文件大小,隊列大小,總上傳個數或其餘限制,只會把文件添加到隊列中,若是這個文件引用仍然存在
返回狀態對象(stats object).
設置或修改狀態對象( Stats Object) . 若是你在上傳完畢後改變上傳成功數,上傳失敗數,你可使用此方法
getFile經過接收file id (某個文件對象的id) 或者 file index (某個文件對象的index屬性),返回在隊列中的文件對象.
當給getFile傳遞一個file_id,只有在隊列中的文件纔可能被獲取,若是找不到文件,將返回null
當給getFile傳遞一個index,全部嘗試入隊的(包括哪些入隊時產生了錯誤的文件)將可能被獲取。若是index索引超出範圍,會返回null
getQueueFile 用來從等待上傳隊列中返回單個文件對象。 具體是經過接收file id (某個文件對象的id) 或者 file index (某個文件對象的index屬性),返回在隊列中的文件對象.index 索引從0開始計算.
當給 getQueueFile傳遞一個file_id,只有在等待上傳隊列中的文件纔可能被獲取,若是找不到文件,將返回null
當給 getQueueFile傳遞一個index,只有在等待上傳隊列中的文件才能夠被獲取 例如: getQueueFile(0) 返回一個在等待上傳隊列首部的文件對象. 若是調用了startUpload函數,它將在當前上傳文件上傳完畢後被上傳。
(yukon:上面2個方法的區別多是:getFile是獲取文件隊列中的文件。包括已上傳的,錯誤的,等待上傳的隊列。而getQueueFile只獲取等待上傳隊列中的文件)
addPostParam 添加一個鍵/值對,在每一個的文件被上傳時以POST方式捎帶發送
它對應着post_params設置中的相同鍵值對。若是post_params中已經存在該值,那麼實際上會被覆蓋。
removePostParam 移除一個鍵/值對,這個鍵值對以前將在每一個的文件被上傳時以POST方式捎帶發送
它對應着post_params設置中的相同鍵值對。若是post_params中已經存在該值,那麼實際上會被移除。
爲指定file_id的某一文件對象添加一個POST鍵/值對,若是添加的name屬性已經存在,那麼原值會被覆蓋。
若是須要給全部文件對象添加POST值,那麼可使用設置中的post_params屬性。
刪除由addFileParam添加的POST值對.
若是POST設置中沒有此屬性,那麼返回false
動態修改設置中的upload_url屬性。
動態修改post_params,之前的屬性所有被覆蓋。param_object必須是一個JavaScript的基本對象,全部屬性和值都必須是字符串類型。
動態修改設置中的file_types 和 file_types_description,兩個參數都是必須的
動態修改設置中的file_size_limit,此修改針對以後的文件大小過濾有效。file_size_limit參數接收一個單位,有效的單位有B、KB、MB、GB,默認單位是KB。
例如: 2147483648 B, 2097152, 2097152KB, 2048 MB, 2 GB
動態修改設置中的file_upload_limit,特殊值0表示無限制。
提醒:這裏限制的是一個SWFUpload實例控制上傳成功的文件總數。
動態修改設置中的file_queue_limit,特殊值0表示無限制。
提醒:這裏限制的是文件上傳隊列中(入隊檢測經過的文件會添加到上傳隊列等待上傳)容許排隊的文件總數。.
動態修改設置中的file_post_name,注意在Linux環境下,FlashPlayer是忽略此設置的。
動態修改設置中的use_query_string,設置爲true的時候,SWFUpload以GET形式發送數據,若是爲false,那麼就以POST發送數據。
動態啓動/禁止 debug輸出,debug_enabled參數是一個布爾值。
動態修改按鈕的圖片。url參數是相對於該swf文件或者是絕對地址的圖片(例如:以 /開始的相對路徑或者是絕對路徑:http://www.swfupload.org/buttonImage.png)。全部FLASH支持的圖片類型均可以使用(gif,jpg,png)。
該按鈕圖片須要通過必定規則(CSS Sprite)的處理。按鈕圖片中須要包括按鈕的4個狀態,從上到下依次是normal, hover, down/click, disabled.(能夠參照官方demo中的圖片)
動態修改SWF影片的尺寸以適應Button的圖片大小。值必須是純數值不能包括長度單位.高必須是整個圖片按鈕高的1/4,以此來保證顯示的正確
動態設置Flash Button中顯示的文字,支持HTML。HTML文本的樣式能夠經過CSS選擇器並配合setButtonTextStyle方法來設置。若是文字過大,將會被隱藏超過的部分關於Flash文本對HTML的支持詳細可見 Adobe's Flash documentation。
配合setButtonText方法,能夠經過CSS樣式來動態設置Flash Button中的文字樣式。關於Flash文本對CSS的支持詳細可見Adobe's Flash documentation
設置flash按鈕文本的左邊和右邊的padding。值能夠爲負數
當設置爲 'true'是會禁用flash按鈕,任何關於按鈕的動做與操做都會被忽略。
定義鼠標被點擊後執行的動做。BUTTON_ACTION常量枚舉中存儲着這個方法可用的值
設置鼠標指針指向按鈕時的樣式。CURSOR常量枚舉中存儲着這個方法可用的值
SWFUpload在操做過程當中會觸發一系列事件,開發者能夠利用這些回調的處理事件來控制UI,控制操做或者報告錯誤。
全部的事件都是在SWFUpload實例的上下文中調用的,所以在這些回調的事件中使用this可以直接訪問到該觸發該事件的實例對象。
全部事件應該在實例初始化時setting參數中預設完成。
【新:】
上傳一個文件時,事件按照下面的順序被調用(上傳事件鏈):
該事件函數是內部事件,所以不能被重寫。加載的FLASH控件完成全部初始化操做時,將觸發此事件來通知SWFUpload它能夠接受各類命令了。
提醒:對應設置中的自定義事件swfupload_loaded_handler
swfUploadPreload 事件是 SWFUpload 已確認各項可用特性以後,Flash Movie加載完畢以前的這段時間內觸發的事件.此事件的處理函數若是返回false,將中止加載swfupload。一般用在處理瀏覽器不支持某重要特性參數的狀況 。
在設置對象的 swfupload_preload_handler 屬性中可設置此事件處理函數
當頁面不能正常加載flash影片的時候。一般是由於沒有安裝Flash Player或者它的版本低於 9.0.28
在設置對象的 swfupload_load_failed_handler 屬性中可設置此事件處理函數
swfUploadLoaded 事件在flash加載並準備完畢後被觸發. 它是可設定的。 swfUploadLoaded 事件將會通知你flash加載完畢,能安全的執行各項方法了。
在設置對象的 swfupload_loaded_handler 屬性中可設置此事件處理函數
mouseClick事件在按鈕被單擊,(同時button_action setting的值爲SWFUpload.BUTTON_ACTION.NONE,或者是flash按鈕被設置爲disable時)才被觸發。 若是button_action settings的值爲其餘,或者flash按鈕可用,這個事件都不被觸發
在設置對象的 mouse_click_handler 屬性中可設置此事件處理函數
mouseOver事件將在鼠標在flash影片的任何部分移動時被觸發
在設置對象的 mouse_over_handler 屬性中可設置此事件處理函數
mouseOut 事件再鼠標離開flash影片時被觸發
在設置對象的 mouse_out_handler 屬性中可設置此事件處理函數
此事件在selectFile或者selectFiles調用後,文件選擇對話框顯示以前觸發。只能同時存在一個文件對話框。可是,這個事件處理函數將不被執行,直到文件選擇對話框被關閉
在設置對象的 file_dialog_start_handler 屬性中可設置此事件處理函數
當選擇好文件,文件選擇對話框關閉消失時,若是選擇的文件成功加入待上傳隊列,那麼針對每一個成功加入的文件都會觸發一次該事件(N個文件成功加入隊列,就觸發N次此事件)。
對應設置中的自定義事件file_queued_handler
當選擇文件對話框關閉時,若是選擇的文件加入到上傳隊列中失敗,那麼針對每一個出錯的文件都會觸發一次該事件(此事件和fileQueued事件是二選一觸發,文件添加到隊列只有兩種可能,成功和失敗)。
文件入隊出錯的緣由可能有:1.超過了上傳大小限制,2.文件爲零字節,3.超過文件隊列數量限制,4.容許外的無效文件類型。
(yukon:經測試,message所含的內容以下:
1.超過了上傳大小限制:message=File size exceeds allowed limit.
2.文件爲零字節:message=File is zero bytes and cannot be uploaded.
3.超過文件隊列數量限制:message=int(指你設定的隊列大小限制數)
4.容許外的無效文件類型:message=File is not an allowed file type.
若是你要改這些消息,請在開源包裏的swfupload.as裏改,而後從新編譯成swfupload.swf。
)
具體的出錯緣由可由error code參數來獲取,error code的類型能夠查看SWFUpload.QUEUE_ERROR中的定義。
提醒:對應設置中的自定義事件file_queue_error_handler
注意:若是選擇入隊的文件數量超出了設置中的數量限制,那麼全部文件都不入隊,此事件只觸發一次。若是沒有超出數目限制,那麼會對每一個文件進行文件類型和大小的檢測,對於不經過的文件觸發此事件,經過的文件成功入隊。
當選擇文件對話框關閉,而且全部選擇文件已經處理完成(加入上傳隊列成功或者失敗)時,此事件被觸發,number of files selected是選擇的文件數目,number of files queued是這次選擇的文件中成功加入隊列的文件數目。
提醒:對應設置中的自定義事件file_dialog_complete_handler
注意:若是你但願文件在選擇之後自動上傳,那麼在這個事件中調用this.startUpload() 是一個不錯的選擇。 若是須要更嚴格的判斷,在調用上傳以前,能夠對入隊文件的個數作一個判斷,若是大於0,那麼能夠開始上傳。
uploadResizeStart事件處理函數在一個圖片開始調整大小時被調用。調整期間不提供progress事件和處理方法。 可是從新編碼圖片會花費一些時間 。若是這期間出現錯誤的話 uploadError事件將會被觸發
當調整完成SWFUpload 繼續觸發 uploadStart事件,而且開始和普通上傳同樣的事件鏈.
在文件開始向服務端上傳以前觸發uploadStart事件,這個事件處理函數能夠完成上傳前的最後驗證以及其餘你須要的操做,例如添加、修改、刪除post數據等。
在完成最後的操做之後,若是函數返回false,那麼這個上傳不會被啓動,若是返回true或者無返回,那麼將正式啓動上傳。
提醒:對應設置中的自定義事件upload_start_handler
uploadProgress事件由flash控件定時觸發,提供三個參數分別訪問上傳文件對象、已上傳的字節數,總共的字節數。所以能夠在這個事件中來定時更新頁面中的UI元素,以達到及時顯示上傳進度的效果。
注意: 在Linux下,Flash Player只在整個文件上傳完畢之後才觸發一次該事件,官方指出這是Linux Flash Player的一個bug,目前SWFpload庫沒法解決。
提醒:對應設置中的自定義事件upload_progress_handler
不管何時,只要上傳被終止或者沒有成功完成,那麼uploadError事件都將被觸發。error code參數表示了當前錯誤的類型,更具體的錯誤類型能夠參見SWFUpload.UPLOAD_ERROR中的定義。Message參數表示的是錯誤的描述。File參數表示的是上傳失敗的文件對象。
例如,咱們請求一個服務端的一個不存在的文件處理頁面,那麼error code會是-200,message會是404。 中止、退出、uploadStart返回false、HTTP錯誤、IO錯誤、文件上傳數目超過限制等,都將觸發該事件,Upload error will not fire for files that are cancelled but still waiting in the queue。(對於官方的這句話我還存在疑問,文件退出之後怎麼還會保留在文件上傳隊列中保留呢?)
提醒:對應設置中的自定義事件upload_error_handler
注意:此時文件上傳的週期尚未結束,不能在這裏開始下一個文件的上傳。
當文件上傳的處理已經完成(這裏的完成只是指向目標處理程序發送完了Files信息,只管發,無論是否成功接收),而且服務端返回了200的HTTP狀態時,觸發uploadSuccess事件。server data指的是服務器發出的一些數據(好比你本身echo出的)而received response是服務器本身發出的HTTP狀態碼
因爲一些Flash Player的bug,HTTP狀態碼可能不會被獲取到,從而致使uploadSuccess事件不能被觸發。因爲這個緣由,2.50版在設置對象中增長了一個新屬性assume_success_timeout 用來設置是否超過了等待接收HTTP狀態碼的最長時間,超過即觸發 uploadSuccess。在這種狀況下,(received response)參數會無效。
設置對象中的 http_success 容許設置在HTTP狀態碼爲非200的其餘值時也觸發uploadSuccess事件。In this case no server data is available from the Flash Player.
在
提醒:對應設置中的自定義事件upload_success_handler
當上傳隊列中的一個文件完成了一個上傳週期,不管是成功(uoloadSuccess觸發)仍是失敗(uploadError觸發),uploadComplete事件都會被觸發,這也標誌着一個文件的上傳完成,能夠進行下一個文件的上傳了。
若是要下個文件自動上傳,那麼在這個時候調用this.startUpload()來啓動下一個文件的上傳是不錯的選擇。不過要當心使用。參見注意
提醒:對應設置中的自定義事件upload_complete_handler
注意:當在進行多文件上傳的時候,中途用cancelUpload取消了正在上傳的文件,或者用stopUpload中止了正在上傳的文件,那麼在uploadComplete中就要很當心的使用this. startUpload(),由於在上述狀況下,uploadError和uploadComplete會順序執行,所以雖然中止了當前文件的上傳,但會當即進行下一個文件的上傳,你可能會以爲這很奇怪,但事實上程序並無錯。若是你但願終止整個隊列的自動上傳,那麼你須要作額外的程序處理了。
若是debug setting設置爲true,那麼頁面底部會自動添加一個textArea, 若是此debug事件沒有被重寫,那麼SWFUpload庫和Flash都會調用此事件來在頁面底部的輸出框中添加debug信息供調試使用。
提醒:對應設置中的自定義事件debug_handler
它是一個js的Object類型的變量,爲SWFUpload的實例初始化提供配置。 其中的每個配置屬性都只能出現一次。 不少屬性都是可選的,若是可選屬性沒有被配置,那麼會使用SWFUpload庫中默認指定的合適的值,具體可查看setting的詳細介紹。
例如:(setting能夠配置的全部屬性)
Example:
{ upload_url : "http://www.swfupload.org/upload.php", flash_url : "http://www.swfupload.org/swfupload.swf", flash9_url : "http://www.swfupload.org/swfupload_fp9.swf", file_post_name : "Filedata", post_params : { "post_param_name_1" : "post_param_value_1", "post_param_name_2" : "post_param_value_2", "post_param_name_n" : "post_param_value_n" }, use_query_string : false, requeue_on_error : false, http_success : [201, 202], assume_success_timeout : 0, file_types : "*.jpg;*.gif", file_types_description: "Web Image Files", file_size_limit : "1024", file_upload_limit : 10, file_queue_limit : 2, debug : false, prevent_swf_caching : false, preserve_relative_urls : false, button_placeholder_id : "element_id", button_image_url : "http://www.swfupload.org/button_sprite.png", button_width : 61, button_height : 22, button_text : "<b>Click</b> <span class="redText">here</span>", button_text_style : ".redText { color: #FF0000; }", button_text_left_padding : 3, button_text_top_padding : 2, button_action : SWFUpload.BUTTON_ACTION.SELECT_FILES, button_disabled : false, button_cursor : SWFUpload.CURSOR.HAND, button_window_mode : SWFUpload.WINDOW_MODE.TRANSPARENT, swfupload_loaded_handler : swfupload_loaded_function, mouse_click_handler : mouse_click_function, mouse_over_handler : mouse_over_function, mouse_out_handler : mouse_out_function, file_dialog_start_handler : file_dialog_start_function, file_queued_handler : file_queued_function, file_queue_error_handler : file_queue_error_function, file_dialog_complete_handler : file_dialog_complete_function, upload_start_handler : upload_start_function, upload_progress_handler : upload_progress_function, upload_error_handler : upload_error_function, upload_success_handler : upload_success_function, upload_complete_handler : upload_complete_function, debug_handler : debug_function, custom_settings : { custom_setting_1 : "custom_setting_value_1", custom_setting_2 : "custom_setting_value_2", custom_setting_n : "custom_setting_value_n", } }
默認值:空字符串
upload_url設置接收的是一個絕對的或者相對於SWF文件的完整URL。推薦使用完整的絕對路徑,以免由瀏覽器和FlashPlayer修改了基準路徑設置而形成的請求路徑錯誤。(yukon:這實際上是相對的,若是你的swfupload和php上傳文件處理頁面始終是放在同一個網站文件夾裏,我卻是推薦用相對路徑)
若是設置對象的屬性preserve_relative_urls爲false,SWFUpload將會把相對路徑轉化成絕對路徑,來避免URL在不一樣系統的flash player中被解析成各類不一樣的格式。若是你禁用SWFUploads的這個轉換,應該使用相對路徑來設定swfupload.swf的位置
注意:這裏須要考慮FlashPlayer的安全域模型。
默認值:Filedata
file_post_name參數容許你設置POST信息中上傳文件的name值(相似傳統Form中設置了<input type="file" name="Filedata"/>的name屬性)。
注意:(2.5版待定)在Linux下面此參數設置無效,接收的name總爲Filedata,所以爲了保證最大的兼容性,建議此參數使用默認值。
默認值:空的Object對象
post_params定義了一些鍵/值對,容許在上傳每一個文件時候捎帶地post給服務器。這個屬性能夠用一個js數組對象來賦值。鍵/值對必須是純字符串或者數字。(可用js的 typeof()函數檢測)
注意: Flash Player 8 不支持捎帶發送post數據. SWFUpload 會自動的以一個query string的形式發送post_params。
默認值:false
該屬性可選值爲true和false,設置post_params是否以GET方式發送。若是爲false,那麼則以POST形式發送。 引進自v2.1.0
默認值:false
preserve_relative_urls可選值爲boolean變量。指示SWFUpload是否將相對URL轉換成絕對URL。若是設置爲true,那麼不會轉換。默認爲false。即自動轉換。
默認值:false
該屬性可選值爲true和false。若是設置爲true,當文件對象發生uploadError時(除開fileQueue錯誤和FILE_CANCELLED錯誤),該文件對象會被從新插入到文件上傳隊列的前端,而不是被丟棄。若是須要,從新入隊的文件能夠被再次上傳。若是要從上傳隊列中刪除該文件對象,那麼必須使用cancelUpload方法。
跟上傳失敗關聯的全部事件一樣會被一一觸發,所以將上傳失敗的文件從新入隊可能會和Queue Plugin形成衝突(或者是自動上傳整個文件隊列的自定義代碼)。若是代碼中調用了startUpload方法自動進行下一個文件的上傳,同時也沒有采起任何措施讓上傳失敗的文件退出上傳隊列,那麼這個從新入隊的上傳失敗的文件又會開始上傳,而後又會失敗,從新入隊,從新上傳...,進入了無止境的循環。
該設置是在v2.1.0中引入的。
默認值:[]
該數組可自定義觸發success事件的HTTP狀態值。200的狀態值始終會觸發success,而且只有200的狀態會提供serverData。
當接受一個200之外的HTTP狀態值時,服務端不須要返回內容。
默認值:0
assume_success_timeout設定SWFUpload將等待多少秒來檢測服務器響應,超時將強制觸發上傳成功 (uploadSuccess)事件。這個屬性是爲了在 Flash Player的bug下正常工做。避免長時間的等待服務器響應,同時解決flash player在mac操做系統下沒法使服務器返回內容的bug。
flash在最後一個uploadProgress事件被觸發30秒後將忽略服務器的響應而強制觸發上傳成功事件。
若是assume_success_timeout被設置爲0,將禁用這個特性。 SWFUpload將長時間等待 Flash Player來觸發 uploadSuccess事件.
默認值:*.*
設置文件選擇對話框的文件類型過濾規則,該屬性接收的是以分號分隔的文件類型擴展名,例如「 *.jpg;*.gif」,則只容許用戶在文件選擇對話框中可見並可選jpg和gif類型的文件。默認接收全部類型的文件。
提醒:該設置只是針對客戶端瀏覽器的過濾,對服務端的文件處理中的文件類型過濾沒有任何限制,若是你須要作嚴格的文件過濾,那麼服務端一樣須要程序檢測。
默認值:All Files
設置文件選擇對話框中顯示給用戶的文件描述。
默認值:0
設置文件選擇對話框的文件大小過濾規則,該屬性可接收一個帶單位的數值,可用的單位有B,KB,MB,GB。若是忽略了單位,那麼默認使用KB。特殊值0表示文件大小無限制。
提醒:該設置只對客戶端的瀏覽器有效,對服務端的文件處理沒有任何限制,若是你須要作嚴格文件過濾,那麼服務端一樣須要程序處理。
默認值:0
設置SWFUpload實例容許上傳的最多文件數量,同時也是設置對象中file_queue_limit屬性的上限。一旦用戶已經上傳成功或者添加文件到隊列達到上最大數量,那麼就不能繼續添加文件了。特殊值0表示容許上傳的數量無限制。只有上傳成功(上傳觸發了uploadSuccess事件)的文件纔會在上傳數量限制中記數。使用setStats方法能夠修改爲功上傳的文件數量。
注意:該值不能跨頁面使用,當頁面刷新之後該值也被重置。嚴格的文件上傳數量限制應該由服務端來檢測、管理。
默認值:0
設置文件上傳隊列中等待文件的最大數量限制。當一個文件被成功上傳,出錯,或者被退出上傳時,若是文件隊列中文件數量尚未達到上限,那麼能夠繼續添加新的文件入隊,以頂替該文件在文件上傳隊列中的位置。若是容許上傳的文件上限(file_upload_limit)或者剩餘的容許文件上傳數量小於文件隊列上限(file_queue_limit),那麼該值將採用這個更小的值。
默認值:空字符串
設置絕對或者相對於此上傳頁面的完整URL,一旦SWFupload實例化之後,此設置不能再被修改。
提醒:測試發現使用setUploadURL方法是能夠修改此設置的。
(v2.5.0新增) 支持 Flash Player 9的Flash 控件(swf) 絕對或相對的URL
(v2.1.0已刪除) Defines the width of the HTML element that contains the flash. Some browsers do not function correctly if this setting is less than 1 px. This setting is optional and has a default value of 1px.
(v2.1.0已刪除) Defines the height of the HTML element that contains the flash. Some browsers do not function correctly if this setting is less than 1 px. This setting is optional and has a default value of 1px.
( v2.2.0已刪除) This setting sets the background color of the HTML element that contains the flash. The default value is '#FFFFFF'.
Note: This setting may not be effective in "skinning" 1px flash element in all browsers.
默認值:true
(v2.2.0新增)該布爾值設置是否在Flash URL後添加一個隨機值,用來防止瀏覽器緩存了該SWF影片。這是爲了解決一些基於IE-engine的瀏覽器上的出現一個BUG。
提醒:SWFUpload是直接在flash_url後添加了一個swfuploadrnd的隨機參數。若是你給定的flash_url中已經存在了GET類型的參數,那麼就會出現兩個問號鏈接符致使錯誤。
默認值:false
該值是布爾類型,設置debug事件是否被觸發。
注意:SWFUpload代碼中是將此變量和字符串true作的恆等判斷,所以它只認定true爲DEBUG模式開啓,若是設置爲1,雖然JS認定是開啓模式,而且在初始化完畢後會有生成Debug Console,但後續操做中FLASH不會輸出調試信息。(由於我習慣用1和0表明布爾變量,所以一度疑惑爲什麼Flash的debug信息沒法輸出。)
默認值:null
(v2.2.0新增) 該必要參數指定了swfupload.swf將要替換的頁面內的DOM元素的ID值。當對應的DOM元素被替換爲SWF元素時,SWF的容器會被添加一個名稱爲"swfupload"的樣式選擇器供CSS自定義使用。
默認值:空字符串
(v2.2.0新增) V2.2.0版最大的改變就是引入了一個按鈕到SWF中,利用該參數能夠設置一個相對於該swf文件或者是絕對地址的圖片(或者是SWF),做爲按鈕的UI展示。全部FLASH支持的圖片類型均可以使用(gif,jpg,png,或者是一個SWF)。
該按鈕圖片須要通過必定規則(CSS Sprite)的處理。按鈕圖片中須要包括按鈕的4個狀態,從上到下依次是normal, hover, down/click, disabled.(能夠參照官方demo中的圖片)
默認值:1
(v2.2.0新增) 設置該SWF的寬度屬性。
默認值:1
(v2.2.0新增)設置該SWF的高度屬性(按鈕圖片高度的1/4)
默認值:空字符串
(v2.2.0新增) 該屬性設置Flash Button中顯示的文字,支持HTML。HTML文本的樣式能夠經過CSS選擇器並配合button_text_style參數來設置。關於Flash文本對HTML的支持詳細可見 Adobe's Flash documentation。
默認值:"color: #000000; font-size: 16pt;"
(v2.2.0新增)此參數配合button_text參數,能夠經過CSS樣式來設置Flash Button中的文字樣式。關於Flash文本對CSS的支持詳細可見Adobe's Flash documentation
默認值:0
(v2.2.0新增) 設置Flash Button上文字距離頂部的距離,可使用負值。
默認值:0
(v2.2.0新增) 設置Flash Button上文字距離左側的距離,可使用負值。
默認值:SWFUpload.BUTTON_ACTION.SELECT_FILES(多文件上傳)
(v2.2.0新增) 設置Flash Button點擊之後的動做。默認爲SWFUpload.BUTTON_ACTION.SELECT_FILES,點擊按鈕將會打開多文件上傳的對話框。若是設置爲SWFUpload.BUTTON_ACTION.SELECT_FILE,則爲單文件上傳。若是設置爲SWFUpload.BUTTON_ACTION.START_UPLOAD,則啓動文件上傳。
默認值:false
(v2.2.0新增) 該布爾值設置Flash Button是不是禁用狀態。當它處於禁用狀態的時候,點擊不會執行任何操做。
默認值:SWFUpload.CURSOR.ARROW(箭頭光標)
(v2.2.0新增) 此參數能夠設置鼠標劃過Flash Button時的光標狀態。默認爲SWFUpload.CURSOR.ARROW,若是設置爲SWFUpload.CURSOR.HAND,則爲手形
默認值:SWFUpload.WINDOW_MODE.WINDOW
(v2.2.0新增) 此參數能夠設置瀏覽器具體以哪一種模式顯示該SWF影片。
默認值:空的Object對象
該屬性接收一個Object類型數據,可用於安全地存儲與SWFUpload實例關聯的自定義信息,例如屬性和方法,而不用擔憂跟SWFUpload內部的方法和屬性衝突以及版本升級的兼容。
設置完畢之後,能夠經過實例的customSettings屬性來訪問。
var swfu = new SWFUpload({ custom_settings : { "My Setting" : "This is my setting", myothersetting : "This is my other setting", integer_setting : 100, a_dom_setting : document.getElementById("some_element_id") } }); var my_setting = swfu.customSettings["My Setting"]); swfu.customSettings["My Setting"] = "This is my new setting"; swfu.customSetting.myothersetting = "another new value"; swfu.customSetting.integer_setting += 25; swfu.customSetting["a_dom_setting"].style.visibility = "hidden";
默認值:null
剩下的設置定義的是一系列事件處理的回調函數,在SWFUpload的操做過程當中相應的事件會被觸發。若是你須要在這些回調中進行自定義操做,那麼你應該在設置中定義對應的JavaScript函數。
SWFUpload實例的support屬性(其類型是一個對象)能確認SWFUpload的某些特性是否能被瀏覽器使用的某版本Flash Player支持
{ load : bool, // 標示SWFupload是否能在當前版本的 Flash Player中載入 imageResize : bool, // 標示當前時候安裝了Flash Player 10或更新版本的Flash Player,而且SWFUpload 是否支持客戶端調節上傳圖片的大小。 }
File對象包含了一組可用的文件屬性,不少處理事件都會傳遞一個File Object參數來訪問該文件的相關屬性。
{ id : string, // SWFUpload控制的文件的id,經過指定該id可啓動此文件的上傳、退出上傳等 index : number, // 文件在選定文件隊列(包括出錯、退出、排隊的文件)中的索引,getFile可以使用此索引 name : string, // 文件名,不包括文件的路徑。 size : number, // 文件字節數 type : string, // 客戶端操做系統設置的文件類型 creationdate : Date, // 文件的建立時間 modificationdate : Date, // 文件的最後修改時間 filestatus : number // 文件的當前狀態,對應的狀態代碼可查看SWFUpload.FILE_STATUS }
該對象提供了上傳隊列的狀態信息,訪問實例的getStats方法可獲取此對象。
該對象包括下面屬性:
{ in_progress : number // 值爲1或0,1表示當前有文件正在上傳,0表示當前沒有文件正在上傳 files_queued : number // 當前上傳隊列中存在的文件數量 successful_uploads : number // 已經上傳成功(uploadSuccess觸發)的文件數量 upload_errors : number // 已經上傳失敗的文件數量 (不包括退出上傳的文件) upload_cancelled : number // 退出上傳的文件數量 queue_errors : number // 入隊失敗(fileQueueError觸發)的文件數量
全部這些屬性的值均可以使用setStats方法來修改,除了in_progress 和 files_queued。
SWFUpload v2.0版本以後引入了幾個插件。它們幫助SWFUpload實現一些功能
大多數插件使用文檔在js插件(plugin)文件夾裏
SWFObject插件使用 SWFObject library 來將 SWFUpload Flash組件(Component)插入頁面
這個插件也提供文檔結構載入完畢檢測功能(Document Ready loading) 。(yukon:可能此功能像是jQery的$(document).ready())和flash版本檢測功能。詳細使用方法以文檔的方式記錄在此插件文件夾內。你最好不要使用 SWFObject的文檔結構載入完畢檢測功能( Document Ready loading)和其餘庫的類似功能混搭共同使用。只用其中的一個就能夠了。
Flash Player 10: 因爲 Flash Player 10要求使用一個按鈕來觸發影片的相關操做,若是這個按鈕 (設置對象裏的button_placeholder_id屬性可標示它的id)被css之類的設置成hidden或者display:none,SWFUpload將加載失敗 。
爲了解決Flash Cookie的 Bug,Cookies插件將自動獲取你瀏覽器的cookie,並隨上傳發送。cookie將以 POST or GET 形式隨上傳url發送。
此插件以POST或GET方式發送cookie的鍵/值對.在服務器端它們不會以cookie形式來解析。某些自動檢測cookie來確認session和身份受權的框架可能並不能獲取此插件傳遞的值。
Queue Handling插件提供隊列處理功能。好比整個隊列的上傳,整個隊列的取消,入隊後自動開始上傳。
speed插件擴展了'file' 對象的幾個屬性用以描述當前上傳狀況。此插件包含了當前速度( current speed),平均速度( average speed),已上傳時間( elapsed time),預計還需的時間( remaining time)等值。
Flash Player以及許多瀏覽器的bug 困擾着SWFUpload. 可是咱們一直在努力。
使用Flash 9 Player以及更早版本,在linux操做系統上執行取消上傳功能將可能致使瀏覽器崩潰。不過新版本的Flash Player改善了這個問題。
linux上的 Flash Player只在上傳完畢後發出一次上傳進度事件 (uploadProgress) ,而不是像windows裏那樣上傳過程當中不斷髮出。
這是因爲一些linux分發版會在上傳過程當中鎖定整個瀏覽器。
咱們收到了一些關於MAC操做系統上Flash Player不能觸發uploadProgress事件的報告。詳細的狀況還有待了解,但請注意其潛在的問題
不管文件的實際MIME格式是什麼,Flash Player以 mime格式application/octet-stream 上傳全部的文件
Flash Player自己並無限制可選擇上傳文件數的最大值,可是限制了總文件名的最大長度。這個字符串是這樣組成的: "文件名"空格"文件名"...。能上傳文件的個數取決於操做系統對文件名總長度的限制。若是用戶選擇了過多的文件,將會收到flash player的警告消息,而且顯示在文件選擇對話框裏(yukon:我在xp一次上傳了173個文件仍然沒警告。。)
Flash Player可能不能正常的使用代理。 它在處理代理驗證時候有些問題,可能致使某些衝突。
有些殺毒軟件使用一個本地客戶端代理來接收上傳的文件並進行掃描,(貌似是截獲了上傳文件,並把它寫入一個代理服務器,掃描完畢後纔會真正發送給目標服務器)這致使SWFUpload錯誤的覺得整個文件被上傳了,它將的發出大量的uploadProgress事件,直到100%完畢。當代理真正地上傳給目標服務器的過程當中,SWFUpload看起來像是被暫停了。
卡巴斯基殺毒軟件:卡巴斯基 (和其餘一些殺軟)實現了一個用戶端的代理,用來截獲本地上傳出的數據。SWFUpload不能檢測這個代理系統的存在。這些代理服務器能很是快地接收上傳的文件,掃描後再發送給目標文件。
Apache的安全模塊 mod_security驗證服務器收到的 POST消息. Flash Player實現了一個邊緣化的方式 (an edge case 翻成取巧的方式?) (有個參數能夠決定是否驗證) POST 上傳文件,服務器也實現了。
咱們收到一些報告稱Flash Player 不能經過SSL來上傳. 這個問題的具體狀況還沒被確認,可是看起來確實在ssl下上傳並不可靠。特別是使用公匙-自簽名證書(self-signed certificates)時會出現問題。
一樣,由不被信任的簽發機構CA發放的 SSL 證書不能被Flash接受。由於flash並無提供一個這樣的接收證書的方法。就像前面說的cookie bug,windows下的flash player只接收它所信任的名單中的CA發放的證書,而無論瀏覽器正在使用中的證書。
HTTP 的受權驗證機制不能被Flash Player良好的支持. 最新版本的 Flash Player會好一些,舊版本的可能會形成瀏覽器崩潰 。
過早終止鏈接 Prematurely ending the response (好比ASP.NET中的Response.end()方法) 會致使本來上傳完畢,SWFUpload卻報告上傳失敗。
改變文件接收名 (默認 「Filedata」 ,設置對象中file_post_name屬性) 在Linux的 Flash Player中並不起做用.
在Windows 下非IE瀏覽器 (FireFox, Opera, Safari, etc) flash插件將會發送IE的cookie . 這破壞了不少服務器的session和受權驗證機制
開發者必須本身手動解決傳遞 Session 和受權 cookie 信息的問題,還要本身手動修改在服務器上的session。若是他們想使用session。
不過SWFUpload軟件包裏提供了一個PHP 或 ASP.Net裏解決此bug的例子代碼。
當和瀏覽器/js交互時,Flash Player不能正確使用escape方法編碼數據。SWFUpload爲解決這個問題作了很大的努力。未來若是這個bug修復了,SWFUpload將會發送而外的escape編碼數據.
過長的服務器響應數據在MAC或Linux系統中的Flash Player下會致使錯誤。數據可能會被裁短,改變或者某些重複。咱們建議服務器發回的數據儘可能的短小簡明。
一旦被緩存了,SWFUpload不能正確工做在Avant瀏覽器上.
SWFUpload v2.2.0版本後添加了 prevent_swf_caching 設置來試圖解決這個問題 .
在出現文件選擇對話框時離開或者刷新頁面將會致使瀏覽器崩潰。(全部瀏覽器,全部操做系統下)
這種狀況大多出如今你設定了一個超級連接<a>的「onclick」調用selectFile/selectFiles ,但又沒有禁止它默認的轉跳動做,點擊這個超鏈的同時會跳到其餘頁面但同時又打開了文件選擇對話框。。
(yukon:還有種可能:程序使頁面強制刷新、重定向。好比HTML <meta>標籤裏的refresh, ASP.NET的Response.Redirect(),php的header()等)
Flash上傳文件給web服務器後,上傳接收程序就會被執行。 接收程序決定是否存儲它們,建立縮略圖,掃描病毒等等,若是接收程序30秒內不返回任何數據,Flash將斷開連接,並返回一個IO錯誤。
若是你不想這樣作,那麼在處理的過程當中,讓服務器返回幾個字符或者數據(若是你能夠)。
好比PHP,雖然PHP腳本能在Flash斷開後繼續成功地完成操做,但斷開以後Flash將不會接收到任何返回數據。
在某些瀏覽器中,若是flash控件沒有處於屏幕顯示區域,設定的WMODE(由BUTTON_WINDOW_MODE設定)會阻止flash控件的載入。,只有當你拉動滾動條,讓flash控件處於屏幕顯示區域,纔會加載並呈現。
(yukon:這樣作是爲了讓頁面儘快呈現,好比你打開一個存滿圖片的文件夾,查看方式調爲縮略圖,猛的下拉,會看見下面的圖片文件逐漸顯示出內容來)
這種特性可能會對SWFObject插件有不利的影響。SWFUpload事件可能不會被觸發,按鈕的背景圖可能不會被載入除非控件呈現完畢。
某些操做系統中 (Linux ) 當 WMODE被設置爲透明, Flash 打開的文件選擇對話框會在瀏覽器窗口以後。
一些瀏覽器 (特別是 IE)不能在flash player用 ExternalInterface類與js交互後回收內存,(好比 SWFUpload). 生成過多的SWFUpload實例而且刷新幾回頁面將致使瀏覽器佔用內存過多,進而致使瀏覽器崩潰或者其餘一些系統錯誤。
在 v2.2.0版本的 SWFUpload中,咱們實現了一些預防內存泄露的機制。可是仍是推薦您在頁面關閉時候調用destroy()方法。若是你在一個頁面使用幾百個SWFUpload實例,你必須當心測試以防內存泄露。