Загрузить несколько файлов, используя проблему HttpFileCollectionBase с C # и MVC3 - PullRequest
4 голосов
/ 29 февраля 2012

Я создал контроллер для сохранения файлов.

Приведенный ниже код является частью этого контроллера:

if ( Request.Files.Count != 0 ) {
      HttpFileCollectionBase files = Request.Files;

      foreach ( HttpPostedFileBase file in files ) {
            if ( file.ContentLength > 0 ) {
               if ( !file.ContentType.Equals( "image/vnd.dwg" ) ) {
                  return RedirectToAction( "List" );
               }
            }
         }
 }

на странице ASPX прост:

<input type="file" name="file" />
<input type="file" name="file" />
...// many inputs type file

Проблема в foreach, потому что она возвращает ошибку вроде (я знаю, потому что я запускаю в режиме отладки и помещаю точку останова в оператор foreach):

Unable to cast object of type 'System.String' to type 'System.Web.HttpPostedFileBase'.

В чем моя ошибка?

Ответы [ 3 ]

10 голосов
/ 29 февраля 2012

Попробуйте так:

[HttpPost]
public ActionResult Upload(IEnumerable<HttpPostedFileBase> files)
{
    if (files != null && files.Count() > 0)
    {
        foreach (var uploadedFile in files)
        {
            if (uploadedFile.ContentType != "image/vnd.dwg") 
            {
                return RedirectToAction("List");
            }

            var appData = Server.MapPath("~/app_data");
            var filename = Path.Combine(appData, Path.GetFileName(uploadedFile.FileName));
            uploadedFile.SaveAs(filename);                    
        }
    }

    return RedirectToAction("Success");
}

и измените разметку так, чтобы входные данные файлов назывались файлами:

<input type="file" name="files" />
<input type="file" name="files" />
...// many inputs type file
3 голосов
/ 12 июля 2016
for (int i = 0; i < Request.Files.Count; i++)
{
    var file = Request.Files[i];
    // this file's Type is HttpPostedFileBase which is in memory
}

HttpRequestBase.Files требуется индекс, поэтому используйте for вместо foreach.

2 голосов
/ 29 февраля 2012

Взгляните на этого поста Фила Хаака, который демонстрирует, как обрабатывать множественные загрузки файлов с использованием MVC. Объект, который вы пытаетесь использовать, предназначен для веб-форм ASP.NET.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...