HttpPostedFileBase всегда возвращает ноль в ASP.NET MVC - PullRequest
48 голосов
/ 18 декабря 2011

У меня проблема при загрузке файла в 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 всегда возвращает ноль.Кто-нибудь может понять, почему ??

Ответы [ 5 ]

118 голосов
/ 18 декабря 2011
@{
    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 идентично.

9 голосов
/ 04 сентября 2014

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

Это действительно не имело значения, что я делал 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

5 голосов
/ 19 марта 2015

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

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

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

<input type="file" name="file1"  />
2 голосов
/ 22 октября 2017

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

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

0 голосов
/ 21 июня 2014

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

Правильный код должен быть таким, как показано ниже:

@section scripts
{
    <script>
        $(document).ready(function () {
            $('.fileinput').fileinput();
...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...