Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why is IFormFile showing null, and how do I fix it?

I am using ASP.NET 5, MVC 6 in VS 2015. I am making a web application. On my form I have:

    <form method="post" enctype="multipart/form-data">     <div id="uploadSection" >         <label >Select files for upload</label>         <input type="file" id="fileSelect" name="fileSelect" multiple />     </div>      <div>         <input type="submit" id="thisbutton" value="button"  />     </div>     </form> 

in my controller:

        [HttpPost]     public async Task<IActionResult> FileForm(FileViewModel vm, IFormFile file)     {         if (ModelState.IsValid)         {             //IFormFileCollection files = Request.Form.Files;             string filePath = Path.Combine("C:", "transfers");             //foreach (var file in files)             //{                 if (file != null && file.Length > 0)                 {                     var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');                     await file.SaveAsAsync(Path.Combine(filePath, fileName));                 }             //}             ModelState.Clear();         }         return View();     } 

I have a much larger form with mother form fields in it that are going into my FormViewModel (ALL fields are populating as they should), and I actually tried putting the IFormFileCollection, ICollection, IList, List as the parameters in the method above and instead also putting it directly in my view model. Whether I do it as a single file or multiple, in the model or the controller, I always get null. The 'IFormFileCollecion files = Request.Form.Files' actually works, but I don't want to do it that way because it should work the way I have or had it. When I put the property for the files in my model, I put "[Required]" above it and it doesn't trigger.

AND, even better, I ran this multiple times with fiddler and it is actually POSTING the files-- so why aren't they being cast into the model?

Do I have my dependencies wrong? Can anyone think of what could cause this?

  "dependencies": {     "Microsoft.AspNet.Diagnostics": "1.0.0-rc1-final",     "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",     "Microsoft.AspNet.Mvc": "6.0.0-rc1-final",     "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",     "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",     "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",     "Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final",     "Microsoft.AspNet.Http":  "1.0.0-rc1-final",     "Microsoft.Extensions.Configuration.FileProviderExtensions" : "1.0.0-rc1-final",     "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",     "Microsoft.Extensions.Logging": "1.0.0-rc1-final",     "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",     "Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final",     "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final"   }, 
like image 807
nebulous Avatar asked Feb 10 '16 21:02

nebulous


People also ask

Can IFormFile be null?

Note: The name of the IFormFile parameter and the name of HTML FileUpload element must be exact same, otherwise the IFormFile parameter will be NULL.

What is IFormFile C#?

What is IFormFile. ASP.NET Core has introduced an IFormFile interface that represents transmitted files in an HTTP request. The interface gives us access to metadata like ContentDisposition, ContentType, Length, FileName, and more. IFormFile also provides some methods used to store files.

How do I save a file in IFormFile?

Save a Stream to a File using C# In the above code, CopyTo method Copies the contents of the uploaded file to the target stream. If using Asynchronous API then please use CopyToAsync method which helps in Asynchronously copying the contents of the uploaded file to the target stream without blocking the main thread.


1 Answers

Your file input has a name attribute of "fileSelect". The name of your parameter to your action is "file". Make them match and it should work.

like image 140
Becuzz Avatar answered Sep 28 '22 15:09

Becuzz