Подтвердить что ты не робот

HttpPostedFileBase всегда возвращает null в ASP.NET MVC

У меня проблема при загрузке файла в ASP.NET MVC. Мой код ниже:

Вид:

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Index2</h2>
@using (Html.BeginForm("FileUpload", "Board", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
  <input type="file" />
  <input type="submit" />
}

Контроллер:

[HttpPost]
public ActionResult FileUpload(HttpPostedFileBase uploadFile)
{
    if (uploadFile != null && uploadFile.ContentLength > 0)
    {
        string filePath = Path.Combine(Server.MapPath("/Temp"), Path.GetFileName(uploadFile.FileName));
        uploadFile.SaveAs(filePath);
    }
    return View();
}

Но uploadFile всегда возвращает null. Может ли кто-нибудь понять, почему?

4b9b3361

Ответ 1

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Index2</h2>
@using (Html.BeginForm("FileUpload", "Board", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
  <input type="file" name="uploadFile"/>
  <input type="submit" />
}

вам нужно предоставить имя для ввода типа файла для uploadFile, чтобы смоделировать работу по связыванию в ASP.net mvc и также также убедиться, что имя вашего типа входного файла и имя аргумента HttpPostedFileBase идентично.

Ответ 2

Я пробовал большинство решений, размещенных в Интернете для этой темы, но нашел, что лучше использовать обходной путь вместо этого.

На самом деле неважно, что я сделал HttpPostedFileBase и/или HttpPostedFile, всегда были нулевыми. Использование коллекции HttpContext.Request.Files, казалось, вообще не имело никаких проблем.

например.

 if (HttpContext.Request.Files.AllKeys.Any())
        {
            // Get the uploaded image from the Files collection
            var httpPostedFile = HttpContext.Request.Files[0];

            if (httpPostedFile != null)
            {
                // Validate the uploaded image(optional)

                // Get the complete file path
                var fileSavePath =(HttpContext.Server.MapPath("~/UploadedFiles") + httpPostedFile.FileName.Substring(httpPostedFile.FileName.LastIndexOf(@"\")));

                // Save the uploaded file to "UploadedFiles" folder
                httpPostedFile.SaveAs(fileSavePath);
            }
        }

В приведенном выше примере я беру только первый файл, но это всего лишь вопрос цикла, хотя коллекция сохраняет все файлы.

HTH

Rob

Ответ 3

В моем сценарии проблема была с атрибутом id, у меня было это:

<input type="file" name="file1" id="file1" />

Душа должна была удалить id:

<input type="file" name="file1"  />

Ответ 4

Также может быть и другой сценарий. В моем случае я получал эту проблему, потому что я был непосредственно рендерингом тега script в моем представлении MVC, и IE дает там проблему.

Правильный код должен выглядеть следующим образом:

@section scripts
{
    <script>
        $(document).ready(function () {
            $('.fileinput').fileinput();
...
}

Ответ 5

В то время как не ответ на этот конкретный пользователь, я хотел бы указать, что HTML требует, чтобы тег формы имел атрибут enctype со значением multipart/form-data. И, конечно, оба атрибута и его значение должны быть правильными.

Для mvc это означает, что при использовании beginform вы должны использовать версию с параметром htmlAttributes