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?

79391 次浏览

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

There are to be further changes in Core 3.0 as IHostingEnvironment is now marked as obsolete.

using Microsoft.Extensions.Hosting;


public class ProfileController  : Controller
{
private IHostEnvironment _hostingEnvironment;


public ProfileController(IHostEnvironment environment)
{
_hostingEnvironment = environment;
}