做Web開發的童鞋都知道,需要經常從客戶端上傳文件到服務端,當然,你可以使用<input type="file"/>來上傳文件,這是Asp.Net默認的上傳文件元素。但是,受到系統的限制,如果要更改file元素的樣式,讓他看起來美觀一些,這就比較費勁了,當然可能是本人css功夫沒到家吧,總之試了幾次,也沒能達到想要的效果。最終,就決定用第三方插件吧。由於項目組成員之前都用的是FileUploader,所以就毫不猶豫的拿來用了一下。
先附上一張整體的布局以及FileUpload呈現的效果。

腳本引進來之后,就可以創建FileUploader對象了。本文主要說這次使用過程中遇到的問題,具體用法就不細說了。具體用法這位哥兒們說的非常詳細了,Fine Uploader。
在上傳過程中,我發現一個非常奇怪的現象,上傳較小一點的文件,一點問題都沒有,非常順利,可是在我偶然上傳了一個稍微大一點的文件(50M),這時候就出現問題了,這時候會一直在那里轉圈,進度一直都是0%,這樣反復了幾次,我發現當上傳不超過24M左右的文件時,都沒有問題,可是一旦超過了,就出現上述的問題,上傳就中止了。由於上傳文件只是大小不一樣導致的問題,所以肯定是哪里做了限制導致了這個問題。檢查了一遍程序,發現有兩個地方對文件的大小做了限制,一個是配置文件中做了如下的配置:
<httpRuntime requestValidationMode="2.0" executionTimeout="90" maxRequestLength="2147483" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" />
可是配置文件此處文件大小是以K為單位的,意思就是此處限制的大小為2147483/1024=2097M,約為2個G,遠遠大於24M,所以應該不是此處引起的問題。然后我又看了一下腳本中上傳文件時的限制,FineUploader本身也可以對文件的后綴和文件的大小做限制,通過如下配置:
validation: { allowedExtensions: ['jpeg', 'jpg', 'gif', 'png'], sizeLimit: 1048576 // 100 M = 100 * 1024 bytes*1024 }
在這里對大小做了100M的控制,所以分析了一下也不可能是這里引起的問題,那么會使哪里引起的問題呢?
我再次拿了一個50M的文件試了一下,仍然上傳不成功,這次我打開了Chrome的調試工具,看了一下Request信息和Response信息,注意,這里有些CHrome版本可能看不到此錯誤信息。"HTTP Error 404.13 - Not Found“,對,居然是404!我們都知道404錯誤是未找到請求的頁面,那么這里怎么會報這個錯誤呢?於是Google了一下,原來很多人出現過這個問題:原因就是上傳文件過大。這是原帖,有興趣的童鞋可以看一下。既然知道了出錯的原因,那么解決起來也就不難了,在Web Config里添加如下的配置:
<system.webServer> <modules runAllManagedModulesForAllRequests="true"/> <security> <requestFiltering> <requestLimits maxAllowedContentLength="512000"></requestLimits> </requestFiltering> </security> </system.webServer>
至此,問題解決。寫這篇文章的目的有兩個:一,如果你遇到了這個問題,可以很快的幫你解決問題;二,希望大家能一起學習,學習解決問題的能力!說到這里,想起了他人的一句名言:方法總比問題多!只要肯思考,總會有解決的辦法的!
