提出問題:
如果使用asp.net上傳檔案,伺服器是把檔案先存到記憶體,等上傳完畢在存到磁碟。
假如:如果上傳1G的檔案的話,就會出現伺服器記憶體不夠,效能大幅度下降。我的想法是通過一邊上傳一邊儲存到磁碟的方法來解決問題,但遇到這樣的問題:擷取到的資料流是上傳完畢的資料流。
-----
傳大檔案不適合直接在asp.net中用<input type=file>進行
要寫成一個activex控制項, 嵌入在aspx頁面
此控制項完成檔案上傳:
1. 把要上傳的檔案分割成小的包, 檔案名稱如: guid-1.m, guid-2.m
2. 寫設定檔,記錄檔案名稱,及總的包數, 包的大小
3. 控制項依次上傳檔案,服務端要接收後判斷傳過來的參數, 總包數等於當前第幾包的時候, 把檔案組合
4. 用web上傳1g內容要很長時間, <processModel>的deallock時間要設得很長, Web.config中的httpRuntime一節也要進行設定
-----
預設只能上傳4M的檔案,要想上傳更大的檔案需要在web.config中設定就
<httpRuntime useFullyQualifiedRedirectUrl="true"
maxRequestLength="819200"
executionTimeout="900"/>
-----
在WEB上用ACTIVEX控制項,使用者上傳的目錄等都是定的,對使用者來講其實和WEB上傳一樣呀,在WEB上選擇一個上傳檔案,管理還是和完全用WEB來傳一樣。,我覺得沒什麼不妥呀,FTP又穩定,為什麼不採用呢?
用VB做一個FTP的ACTIVEX是很簡單的事情,網上也很多,有些可以直接拿來用,介面稍微修改下就成了。
-----
在/Microsoft.NET/Framework/v1.0.3705/CONFIG/machine.config檔案中,定位maxRequestLength,改變其值為你需要的值,如
maxRequestLength="10240",表示可以上傳10M的檔案
-----
B/S結構下很難以實現檔案的續傳,如果實在是速度慢,不防開一個後台線程來上傳。
-----
個人認為用c/s方式上傳檔案,用b/s管理檔案才是最終的解決辦法