在Asp.net Mvc 3中使用swfupload
一、無法在iis下顯示上傳按鈕的問題
注意在js中,路徑要絕對按照下面的方式書寫:
flash_url: '@Url.Content("~/Common/SwfUpload/swfupload.swf")',
button_image_url: '@Url.Content("~/Common/SwfUpload/TestImageNoText_65x29.png")',
如果寫成
button_image_url: '/Common/SwfUpload/TestImageNoText_65x29.png")',
則在iisexpress中調試能夠通過,但在iis中運行的時候會出現錯誤,原因是前者會將虛擬路徑加上,后者不會。
最終造成的問題是:1、上傳按鈕不會顯示;2、當然也無法點擊打開文件對話框,因為swf文件也無法載入。
二、上傳路徑的寫法:
假設我們使用UploadController的Upload方法,來處理上傳,那么:
1、參數要一致,當然,我們可以不要設置參數,只用Request.Files來獲得傳來的文件
2、路徑和flash_url一致,也用url.Content,當然也可用Url.Action
三、后臺代碼的書寫:
對于1個文件,對于多個文件
四、文件大小限制
五、file和swfupload的區別:
原理上說,swfupload在本地讀取文件,我們通過js能夠獲取本地的進度。因此,開始傳了多少,在尚未到達服務器的時候我們就知道。
file控件則是整個文件傳遞到服務器后我們才能知道進度,當然,有一些特別的服務端的方法,可以解析請求內容,得到“到達的數量”
因此,swfupload通過js輪詢本地的進度。
當然,如果服務端處理耗時較長的話,也可以由本地js,輪詢服務端某個進度值。
所以,可以統一進度條的樣式,服務端處理通常包括:1、將到達的請求(已經包含整個文件)保存到磁盤上;2、如果是導入操作,再將其加入數據庫。
這是對excel之類的情形,如果以某種文件形式上傳導入到數據庫,則無需保存文件的操作,僅針對stream處理即可。
六、考慮客戶端禁用java或未安裝Flash的問題
七、封裝上傳功能:
實際上,對于單文件上傳,理想的方法是提供一個按鈕,選擇文件后,在按鈕后方或者下方,出現文件名,正在上傳和一個進度條。當然,能夠顯示上傳耗時、剩余多少時間、上傳速度最好。
上傳結束后,保持這些信息,同時顯示“上傳成功”,下次選擇文件的時候,重復此動作。
如果客戶端禁用js,則改用file控件,不顯示進度---此時也無法通過js做什么。
如果客戶端可用js,但未安裝flash,這時可以用一個滾動的gif圖形,粗略的表示上傳正在進行。
對于多文件,方式差不多。大體上,swfupload官網的Demo包括file隊列、速度等js文件,改改就能用。
對于Asp.net mvc,實際上可以有兩種封裝方法:
1、封裝為htmlhelper
2、全局提供唯一的一個上傳Action,各處調用。

浙公網安備 33010602011771號