2010-12-10 17 views
7

Mam formularz na stronie HTML, który użytkownik musi użyć, aby przesłać plik, który publikuje na stronie ASPX. W kodzie z tyłu chcę przetestować, czy plik został załadowany.HTTPRequest.Files.Count Nigdy nie równa się zero

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

Nigdy nie dostaję się do czegoś innego. Czy tak działa ASP.NET? Jeśli mam element wejściowy pliku typu, czy zawsze będzie przesyłał "plik", nawet jeśli nie został wybrany?

Jaki jest właściwy sposób na zrobienie tego? Może to?

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."); 
} 

Odpowiedz

6

Może po prostu to zrobi:

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

Niestety, jeśli uzyskasz dostęp do właściwości Pliki w ogóle, nie możesz później wywołać Request.GetBufferlessInputStream: "Ta metoda lub właściwość nie jest obsługiwana po wywołaniu HttpRequest.Form, Files, InputStream lub BinaryRead" – dudeNumber4

+0

@ dudeNumber4 Tak jest wybrana odpowiedź niepoprawna? Nie mam Visual Studio na tym komputerze teraz do zbadania – kzh

+0

Cóż, to jest dla mnie niepoprawne, ponieważ muszę uzyskać dostęp do tej metody w celu fragmentacji (duże) przesłanych plików, tak aby nie przeciążenie pamięci serwera.Jeśli nie potrzebujesz dostępu do tej metody, to przypuszczam, że nic ci nie jest. – dudeNumber4

-1

Chciałbym również upewnić się, że dane jest powrót metodą .count nie jest ciągiem. Wartość łańcuchowa "0" jest zawsze większa niż wartość int równą 0; które zawsze powróciłyby w tym stanie.

Chciałbym spróbować typecasting powrotu .count jako int, aby upewnić się, że odpowiednie typy są porównywane. Nawet ciąg "-1" ma wyższą wartość bitową niż int zero.

tylko myśl, chociaż mogę się mylić ....

+0

'count' nigdy nie będzie ciągiem, ponieważ jest typu' int' .Dziękuję. – kzh

7

Request.Files.Count zawsze zawiera nie. z <input type="file"> elementów w twojej formie, zapakowanych w sklepie Key:Value.

W związku z tym, jeśli opublikowany formularz nie zawiera znaczników <input type="file">, wówczas Request.Files.Count zwróci 0.

Każdy Key jest name z <input type="file" name="OneOfTheKeys">, a wartość jest typu HttpPostedFileWrapper.

Aby uzyskać więcej informacji na temat HttpPostedFileWrapper, zobacz stronę here.

Powiązane problemy