最近公司方面請軟體公司開發了一套系統,使用者在上傳檔案時發現,如果上傳檔案超過2M,網頁就會出錯,導致作業失敗,關於這點,使用者跟軟體公司反應了一段時間(約半年)都沒有什麼進展,最近軟體公司跟使用者說,這個是你們公司伺服器的問題,要叫資訊人員解決,在使用者跟我反應後,雖然不爽,不過還是撥空幫他們看看,心裡面其實想,至少我要證明不是我們的問題,再叫對方來罵,反正都拖了半年了,尾款收不到是他們的事情,與我何干。

簡單的看了一下使用者寄來的畫面,原則上先往IIS看一下設定是否有相關預設值可修改,結果沒有,本來想丟到Facebook請朋友幫忙,但想想,還是自己先google一下看看,至少也要先試著解決,這樣找別人幫忙才有立場。

結果,不看則已,一google下去,一堆人有這樣的問題,解決方法也一樣一整堆。證明了那家軟體公司真的很水昆,這樣的問題他們應該遇到非常多了,應該也都有相對應的解法才對,總不可能都叫客戶自己想辦法吧。唉~~實在是.....。所以雖然修正了對方的web.config內的程式碼,也成功解決了這個問題,但是,我打算再把程式碼改回來,讓對方自己想辦法去處理。啍....

問題描述如下:

asp.net upload error 
說明:
 在 ASP.NET 2.0 使用 FileUpload 控制項上傳超過 4MB 的檔案時,可能會面臨無法上傳的問題。這是因為上傳內容的長度超過了 maxRequestLength 參數在 Machine.config 檔案所定義的預設上限值 4096 (4 MB),這個限制是 ASP.NET 為了要預防可能的「拒絕服務」攻擊(Denial of Service attacks)。
 
解決方法:
可以到出錯網站的實體路徑下,找到web.config這個檔案,用記事本打開,在<system.web>之間加入以下的字串
<httpRuntime maxRequestLength="10240" />,
如下圖所示,存檔後再測試看看,這時傳送10M以下的檔案已可正常。
<System.Web>
<httpRuntime maxRequestLength="10240" />
</System.Web>

但是檔案如果還是超過了10M的限制,則還是會出錯,比較好的處理方式是在 Global.asax 加入 Application_BeginRequest 事件處理常式,在檔案未上傳前,先檢查 HTTP 標頭內容的長度,如果超過 maxRequestLength 的設定値,便將用戶端重新導向導引到自訂的錯誤頁面,但可惜的是,軟體廠商開發時並沒把這個設定加入,所以我在網站的實體路徑下找不到Global.asax這個檔案。

<%@ Application Language="C#" %>
<%@ Import Namespace="System.Web.Configuration" %>
<script runat="server">

void Application_BeginRequest(object sender, EventArgs e)
{
    HttpRuntimeSection section = (HttpRuntimeSection)ConfigurationManager.GetSection("system.web/httpRuntime");
    int maxFileSize = section.MaxRequestLength*1024;

    if (Request.ContentLength > maxFileSize)
    {
        Response.Redirect("~/FileTooLarge.aspx");
    }
}
</script>

Global.asax說明

http://msdn.microsoft.com/zh-tw/library/aa720712(v=vs.71).aspx 

 




 
 
arrow
arrow
    全站熱搜

    挨踢狼 發表在 痞客邦 留言(0) 人氣()