Вам нужно что-то вроде метода GetFileByExtension ():
HttpPostedFileBase GetFileByExtension(HttpFileCollectionBase files, string[] extensions)
{
Func<string, bool> extensionIsValid =
fileExtension => extensions.Any(
extension => String.Compare(extension, fileExtension, true) == 0
);
return files.Cast<string>().Select(x => files[x]).Single(
file => extensionIsValid(System.IO.Path.GetExtension(file.FileName))
);
}
или
IList<HttpPostedFileBase> GetAllFilesByExtension(HttpFileCollectionBase files, string[] extensions)
{
Func<string, bool> extensionIsValid =
fileExtension => extensions.Any(
extension => String.Compare(extension, fileExtension, true) == 0
);
return files.Cast<string>().Select(x => files[x]).Where(
file => extensionIsValid(System.IO.Path.GetExtension(file.FileName))
).ToList();
}
пример:
var imageFile = GetFileByExtension(Request.Files,
new [] { ".jpg", ".gif", ".png", ".bmp" });
var pdfFile = GetFileByExtension(Request.Files, new [] { ".pdf" });
или
var imageFiles = GetAllFilesByExtension(Request.Files,
new [] { ".jpg", ".gif", ".png", ".bmp" });
var pdfFiles = GetAllFilesByExtension(Request.Files, new [] { ".pdf" });
ОБНОВЛЕНИЕ:
Возможно, вам следует попробовать загрузить с использованием отдельных форм / действий для разных загрузок (что-то вроде / upload / create? Newsid = 1? Uploadtype = изображение для изображений и / upload / create? Newsid = 1? Uploadtype = pdf для PDF-файлов) Ваше действие Upload.Create может выглядеть так:
public class UploadController : Controller
{
public ActionResult Create(int newsId, string uploadType)
{
if(uploadType == "image")
{
// uploading only images
var imageFiles = GetAllFilesByExtension(Request.Files, new [] { ".jpg", ".gif", ".png", ".bmp" });
...
}
}
}
В этом случае вы всегда знаете тип файлов, которые следует загрузить в действие