2010-12-10 180 views
7

我有一個HTML頁面上的表單,用戶需要用它來上傳文件發佈到ASPX頁面。在後面的代碼中,我想測試一個文件是否已經被加載。HTTPRequest.Files.Count永不等於零

if (Request.Files.Count > 0) 
{ 
    DoStuff(Request.Files[0]); 
} 
else 
{ 
    throw new Exception("A CSV file must be selected for upload."); 
} 

我從來沒有去過別人。這是ASP.NET如何運作?如果我有一個文件類型的輸入元素,即使沒有選擇文件,它是否總是會上傳一個「文件」?

這樣做的正確方法是什麼?也許這個?

if (Request.Files.Count > 0 && Request.Files[0].ContentLength > 0) 
{ 
    DoStuff(Request.Files[0]); 
} 
else 
{ 
    throw new Exception("A CSV file must be selected for upload."); 
} 

回答

6

也許只是這會做:

if (Request.Files.Count > 0 && Request.Files[0].ContentLength > 0) 
{ 
    DoStuff(Request.Files[0]); 
} 
else 
{ 
    throw new Exception("A CSV file must be selected for upload."); 
} 
+0

不幸的是,如果你完全訪問Files屬性,你不能隨後調用Request.GetBufferlessInputStream:「調用HttpRequest.Form,Files,InputStream或BinaryRead後,此方法或屬性不受支持」 – dudeNumber4 2014-10-03 19:44:46

+0

@ dudeNumber4所以選擇的答案不正確?我現在沒有Visual Studio在這臺計算機上進行調查。 – kzh 2014-10-03 20:00:24

+0

嗯,這對我來說是不正確的,因爲我需要訪問該方法以分塊(大)上傳的文件,所以他們不會如果你不需要訪問那個方法,我想你沒問題。 – dudeNumber4 2014-10-06 14:54:38

-1

我也將確保該數據是由.Count中方法的返回是不是字符串。一個字符串值'0'總是大於一個int值0;在那種情況下它總會返回true。

我會嘗試強制.count返回作爲一個整數,以確保正確的類型進行比較。即使是一個字符串'-1'也具有比int零更高的位值。

只是一個想法,雖然我可能是錯的....

+0

'count'永遠不會是一個字符串,因爲它的類型是'int'。 – kzh 2011-02-02 14:54:45

7

Request.Files.Count總是包含沒有。 <input type="file">元素在您的表單中,包裹在Key:Value商店中。

因此,如果您的發佈表單不包含任何<input type="file">標籤,則Request.Files.Count將返回0

每個Key<input type="file" name="OneOfTheKeys">name,其值爲HttpPostedFileWrapper

請參閱here瞭解HttpPostedFileWrapper