幾個方法:
- 修改檔案上傳大小的限制
- 以檔案形式儲存到伺服器
- 轉換成二進位位元組流儲存到資料庫
- 將二進位通過迴圈的方式寫入磁碟
一、修改檔案上傳大小的限制
通過對web.config和machine.config檔案進行修改.
對網站根目錄下的web.config進行修改:
原:
<httpRuntime executionTimeout="90" maxRequestLength="800000" useFullyQualifiedRedirectUrl="false"/>
對executionTimeout進行修改,可以修改逾時時間.對maxRequestLength進行修改,可以修改上傳檔案的上限.
對機器上Microsoft.NET\Framework\v1.1.4322\CONFIG\machine.config進行修改:
原:
<httpRuntime executionTimeout="90" maxRequestLength="4096" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" enableVersionHeader="true" />
對executionTimeout進行修改,可以修改逾時時間.對maxRequestLength進行修改,可以修改上傳檔案的上限.
還可以(沒測試過,不知道是否有用):
在“服務”裡關閉 iis admin service 服務。
找到 C:\WINDOWS\system32\inetsrv下的 metabase.xml 檔案。
找到 ASPMaxRequestEntityAllowed 把它修改為需要的值(可修改為20M即:20480000)
存檔,然後重啟 iis admin service 服務。
前提方法:
private string GetFilePath() { string Folder = Server.MapPath("temp"); string file = FileUpload1.FileName; string RealFile = Folder + "\\" + file; return RealFile; }
二、以檔案形式儲存到伺服器
protected void Upload_Click(object sender, EventArgs e) { string filename = FileUpload1.FileName; FileUpload1.SaveAs(Server.MapPath("source/") + filename); }
protected void Button4_Click(object sender, EventArgs e) { HttpPostedFile posted = FileUpload1.PostedFile; string RealFile = GetFilePath(); posted.SaveAs(RealFile); }
protected void Button1_Click(object sender, EventArgs e) { string filepath = GetFilePath(); byte[] b = FileUpload1.FileBytes; FileStream fs = new FileStream(filepath, FileMode.Create); fs.Write(b, 0, b.Length); fs.Close(); }
三、轉換成二進位位元組流儲存到資料庫
protected void Button3_Click(object sender, EventArgs e) { HttpPostedFile posted = FileUpload1.PostedFile; byte[] b = new byte[posted.ContentLength]; posted.InputStream.Read(b, 0, b.Length); /* * 將資料寫入資料庫 */ }
四、將二進位以迴圈的方式寫入磁碟
protected void Button3_Click(object sender, EventArgs e) { string filepath = GetFilePath(); FileStream stream = new FileStream(filepath, FileMode.Create); int length = 20480; byte[] b = new byte[length]; try { int size = FileUpload1.PostedFile.InputStream.Read(b, 0, length); while (size > 0) { stream.Write(b, 0, size); size = FileUpload1.PostedFile.InputStream.Read(b, 0, length); } } catch (Exception ex) { Response.Write(ex.Message + "<br/>"); Response.Write(ex.InnerException.Message); } finally { if (stream != null) { stream.Flush(); stream.Close(); } } }
附:
- 在IIS中調大一些指令碼逾時時間,操作方法是: 在IIS的“網站或虛擬目錄”的“主目錄”下點擊“配置”按鈕,設定指令碼逾時時間為:300秒 (注意:不是Session逾時時間)
- 解決SERVER 2003無法下載超過4M的附件問題
在“服務”裡關閉 iis admin service 服務。
找到 windows\system32\inetsrv\ 下的 metabase.xml 檔案。
找到 AspBufferingLimit 把它修改為需要的值(可修改為20M即:20480000)
存檔,然後重啟 iis admin service 服務。