it-swarm-pt.tech

HttpPostedFileBase sempre retorna nulo no asp.net MVC

Tenho um problema ao carregar um arquivo no ASP.NET MVC. Meu código está abaixo:

Visão:

@{
    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" />
}

Controlador:

[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();
}

Mas uploadFile sempre retorna nulo. Alguém pode descobrir por quê?

49
Joshua Son
@{
    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" />
}

você precisa fornecer nome do arquivo de tipo de entrada para uploadFile para modelar o trabalho de ligação no ASP.net mvc e
também verifique se nome do arquivo do tipo de entrada e nome do argumento de HttpPostedFileBase é idêntico.

118
dotnetstep

Eu tentei a maioria das soluções postadas on-line para este tópico, mas achei melhor usar uma solução alternativa.

Realmente não importava o que eu fiz, o HttpPostedFileBase e/ou o HttpPostedFile sempre foram nulos. O uso da coleção HttpContext.Request.Files parecia funcionar sem aborrecimentos.

por exemplo.

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

No exemplo acima, eu apenas pego o primeiro arquivo, mas é apenas uma questão de repetir a coleção para salvar todos os arquivos.

HTH

Roubar

9
roblem

No meu cenário, o problema estava com o atributo id, eu tinha o seguinte:

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

O soultion era remover id:

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

Embora não seja a resposta para esse usuário específico, gostaria de salientar que o HTML exige que a tag do formulário tenha um atributo enctype com o valor multipart/form-data. E, claro, o atributo e o atributo O valor deve estar correto.

Para mvc, isso significa que, ao usar beginform, você deve usar a versão com o parâmetro htmlAttributes

2
jmoreno

Também pode haver outro cenário. No meu caso, eu estava recebendo esse problema porque estava processando diretamente a tag de script na minha exibição MVC e IE está dando problema lá.

O código correto na exibição deve ser o seguinte:

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