SWFUpload檔案上傳

aywrenyue發表於2009-12-01
Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE MicrosoftInternetExplorer4

官方網址:

中文的說明文件:http://www.v-sky.com/doc/swfupload/v2.1.0/Documentation.html Version2.1.0

SWFupload是利用flash上傳檔案的,支援多檔案上傳,SWFupload的多檔案上傳是傳送多個Http請求,每一個請求傳送一個檔案,每一個檔案可以攜帶自己的file parameters,在這個專案中這個file parameters可以為重新命名檔名。

在中文文件中描述的很清楚,檔案在被選擇進佇列到上傳成功,檔案狀態的變遷。在每一個過程中應該處理什麼,會觸發那個函式,文件中描述比較清楚。

我主要描述一下在專案中遇到的問題:

1、 flash上傳檔案的Cookie bug

a) 先說一下我們的專案結構吧,所有的受保護請求都被一個攔截器(Inspector)攔截,在攔截器中判斷使用者的合法性。

b) 在非IE核心的瀏覽器中傳送請求時,flash將非永續性的cookie(這個不知道怎麼理解,可能是每一個請求所帶的cookie吧,不是透過server顯式寫到客戶端的。)全部過濾掉,不給server傳送,當然包括JSESSIONID,這樣導致在Firefox等非IE核心的瀏覽器下無法上傳檔案。

c) 解決辦法,將失去的這個JSESSIONID作為引數提交給server,重新加入對JSESSIONID的支援程式碼如下:

if(!jQuery.browser.msie)

{

var start = url.indexOf('doUpload.do') + 11;

url = url.substring(0, start) + ';jsessionid=' +Upload.getCookie('JSESSIONID') + url.substr(start);

}

Upload.getCookie = function(key)

{

var acookie = document.cookie.split("; ");

for(var i = 0; i < acookie.length; i++)

{

var arr = acookie[i].split("=");

if(key == arr[0] && arr.length > 1)

{

return unescape(arr[1]);

}

}

return '';

}

d) 這樣既在請求的URL中加入JESSIONID,這裡注意不能使用SWFuploadaddPostParam方法。

2、 第二個大問題就是flash在上傳的過程,將所有的檔案型別全部格式化為一種:application/octet-stream,這樣在解析過程中取不到實際的檔案型別,這個問題目前還不知道如何解決,不過有一個比較笨的辦法就是,把常用的那些檔案的副檔名和 MIME TYPE做一個對映,根據客戶端傳上來的副檔名,獲得MIME TYPE。但是這個方法存在很多缺陷,例如,客戶端把txt副檔名手動更改為exe,這樣,獲得的型別其實是不準確的。

其他的在處理上傳的過程中還是比較順利的。因為專案最終還沒有完成,暫時就寫這麼多吧!

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/200919/viewspace-1029245/,如需轉載,請註明出處,否則將追究法律責任。