最近公司方面請軟體公司開發了一套系統,使用者在上傳檔案時發現,如果上傳檔案超過2M,網頁就會出錯,導致作業失敗,關於這點,使用者跟軟體公司反應了一段時間(約半年)都沒有什麼進展,最近軟體公司跟使用者說,這個是你們公司伺服器的問題,要叫資訊人員解決,在使用者跟我反應後,雖然不爽,不過還是撥空幫他們看看,心裡面其實想,至少我要證明不是我們的問題,再叫對方來罵,反正都拖了半年了,尾款收不到是他們的事情,與我何干。
簡單的看了一下使用者寄來的畫面,原則上先往IIS看一下設定是否有相關預設值可修改,結果沒有,本來想丟到Facebook請朋友幫忙,但想想,還是自己先google一下看看,至少也要先試著解決,這樣找別人幫忙才有立場。
結果,不看則已,一google下去,一堆人有這樣的問題,解決方法也一樣一整堆。證明了那家軟體公司真的很水昆,這樣的問題他們應該遇到非常多了,應該也都有相對應的解法才對,總不可能都叫客戶自己想辦法吧。唉~~實在是.....。所以雖然修正了對方的web.config內的程式碼,也成功解決了這個問題,但是,我打算再把程式碼改回來,讓對方自己想辦法去處理。啍....
問題描述如下:
<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
留言列表