Search code examples
c#asp.net-core-1.0

How to save IFormFile to disk?


I'm trying to save a file on disk using this piece of code.

IHostingEnvironment _hostingEnvironment;
public ProfileController(IHostingEnvironment hostingEnvironment)
{
   _hostingEnvironment = hostingEnvironment;
}

[HttpPost]
public async Task<IActionResult> Upload(IList<IFormFile> files)
{
    foreach (var file in files)
    {
        var fileName = ContentDispositionHeaderValue
            .Parse(file.ContentDisposition)
            .FileName
            .Trim('"');

        var filePath = _hostingEnvironment.WebRootPath + "\\wwwroot\\" + fileName;
        await file.SaveAsAsync(filePath);
    }
    return View();
}

I was able to replace IApplicationEnvironment with IHostingEnvironment, and ApplicationBasePath with WebRootPath.

It seems like IFormFile doesn't have SaveAsAsync() anymore. How do I save file to disk then?


Solution

  • A few things have changed since core's release candidates

    public class ProfileController : Controller {
        private IWebHostEnvironment _hostingEnvironment;
    
        public ProfileController(IWebHostEnvironment environment) {
            _hostingEnvironment = environment;
        }
    
        [HttpPost]
        public async Task<IActionResult> Upload(IList<IFormFile> files) {
            string uploads = Path.Combine(_hostingEnvironment.WebRootPath, "uploads");
            foreach (IFormFile file in files) {
                if (file.Length > 0) {
                    string filePath = Path.Combine(uploads, file.FileName);
                    using (Stream fileStream = new FileStream(filePath, FileMode.Create)) {
                        await file.CopyToAsync(fileStream);
                    }
                }
            }
            return View();
        }
    }