HTTPRequest.Files.Count Никогда не равно нулю - PullRequest
8 голосов
/ 10 декабря 2010

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

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

Я никогда не получаю информацию о другом.Это так, как работает ASP.NET?Если у меня есть элемент ввода типа file, всегда ли будет загружаться «файл», даже если он не выбран?

Как правильно это сделать?Может быть, это?

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

Ответы [ 4 ]

8 голосов
/ 10 декабря 2010

Может быть, просто так будет:

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.");
}
7 голосов
/ 03 марта 2014

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

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

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

См. здесь , чтобы узнать о HttpPostedFileWrapper,

2 голосов
/ 10 декабря 2010

Вы должны использовать элемент управления FileUpload и проверить .HasFiles, чтобы увидеть, было ли что-либо загружено.

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload.aspx

0 голосов
/ 11 декабря 2010

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

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

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

...