2010-12-10 3 views
7

У меня есть форма на HTML-странице, которую пользователь должен использовать для загрузки файла, который отправляется на страницу ASPX. В коде позади я хочу проверить, действительно ли файл загружен.HTTPRequest.Files.Count Never Equals Zero

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

+0

@ dudeNumber4 – kzh

+0

Ну, это неправильно для меня, потому что мне нужно получить доступ к этому методу, чтобы вырезать (большие) загруженные файлы, чтобы они не были Если вам не нужен доступ к этому методу, я полагаю, что все в порядке. – dudeNumber4

-1

Я также хотел бы убедиться, что данные, будучи возвращение в .Count метод не является строкой. Строковое значение '0' всегда больше значения int 0; который всегда возвращался бы в этом состоянии.

Я бы попробовал typecasting .count return как int, чтобы убедиться, что сравниваются соответствующие типы. Даже строка '-1' имеет более высокое значение бита, чем int zero.

только мысль, хотя я могу ошибаться ....

+0

'count' никогда не будет строкой, так как это тип' int'. Спасибо. – kzh

7

Request.Files.Count всегда содержит нет. <input type="file"> элементы в вашей форме, завернутые в магазин Key:Value.

Следовательно, если ваша размещенная форма не содержит никаких тегов <input type="file">, то Request.Files.Count вернет 0.

Каждый Key является name of <input type="file" name="OneOfTheKeys"> и имеет значение HttpPostedFileWrapper.

См. here, чтобы узнать о HttpPostedFileWrapper.