「編程經驗」大文件上傳提示“413,請求實體太大”問題的解決

最近的編程項目,需要完成一個將大文件上傳到服務器的功能,但是,在功能測試過程中遇到了一個問題,遇到上傳超過28M的文件的時候就會報錯。提示“Request Entity Too Large”,截圖如下。

「編程經驗」大文件上傳提示“413,請求實體太大”問題的解決

在此之前我已經在web.config中加入了maxRequestLength參數,讓服務器可以接收大更大的文件。但是問題還是沒有解決。不管這個數值改成多大,上傳大於28MB的文件的時候,依舊會提示上面的錯誤。

「編程經驗」大文件上傳提示“413,請求實體太大”問題的解決

為了解決這個詭異的問題,於是我又在網上搜索相關的資料,經過幾個小時的搜索查找,最後終於找到了解決方案,問題總算是解決了。這個有效的解決方案很簡單,我的程序的運行環境是iis7.5,只需要在web.config文件中加入如下代碼就可以了。這串代碼要加入到<system.webserver>標籤中間,再次測試程序,沒有報錯,而且文件順利上傳到服務器上了。

「編程經驗」大文件上傳提示“413,請求實體太大”問題的解決

問題就這樣解決了。“maxAllowedContentLength”這個屬性用來設置Http的Post類型請求可以提交的最大數據量。而“MaxRequestLength”屬性是用來設置輸入流的緩衝閾值的最大數值。

「編程經驗」大文件上傳提示“413,請求實體太大”問題的解決

由於服務器為了防止用戶將大量文件傳遞到該服務器而導致的拒絕服務攻擊。這兩個數值都設置的比較小。其中MaxRequestLength的默認值為4096 KB(即4 MB),最大值為2147483647 KB(即2 TB)。maxAllowedContentLength的默認值為30000000字節(即28.6 MB),最大值為4294967295字節(即4 GB)。所以我們需要完成大文件的上傳,就需要將這兩個數值修改到我們允許的數值範圍內。

最後的一些思考,第一,現在終於明白了一開始那個詭異的問題。28.6M的限制其實就是第2個參數的最低數值。第二、如果我將這些數值改的很大,是不是會對服務器產生安全隱患。第三、目前主流的網盤和視頻分享網站上傳文件限制在2G以內估計也是因為這兩個參數的限制,再大的文件就必須用客戶端採用C/S的架構上傳文件了。

把這經驗和思考分享給大家,希望大家少走些彎路。


分享到:


相關文章: