我正在尝试使用ASP.NET Core Web Api上传文件。 很多我发现这个代码:
namespace ModelBindingWebSite.Controllers
{
public class HomeController : Controller
{
private IHostingEnvironment _environment;
public HomeController(IHostingEnvironment environment)
{
_environment = environment;
}
public IActionResult Index()
{
return View();
}
[HttpPost]
public async Task<IActionResult> Index(ICollection<IFormFile> files)
{
var uploads = Path.Combine(_environment.WebRootPath, "uploads");
foreach (var file in files)
{
if (file.Length > 0)
{
var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
await file.SaveAsAsync(Path.Combine(uploads, fileName));
}
}
return View();
}
}
我收到错误IFormFile
不包含SaveAsASync
的定义,也没有扩展方法。
有什么想法吗?
答案 0 :(得分:1)
请参阅https://github.com/aspnet/HttpAbstractions/issues/610,其中解释了该方法已被取代的原因
答案 1 :(得分:1)
您可以简单地构建一个方便的扩展程序供以后使用
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
public static class FileSaveExtension
{
public static async Task SaveAsAsync(this IFormFile formFile, string filePath)
{
using (var stream = new FileStream(filePath, FileMode.Create))
{
await formFile.CopyToAsync(stream);
}
}
public static void SaveAs(this IFormFile formFile, string filePath)
{
using (var stream = new FileStream(filePath, FileMode.Create))
{
formFile.CopyTo(stream);
}
}
}
实现:
formFile.SaveAsAsync("Your-File-Path"); // [ Async call ]
formFile.SaveAs("Your-File-Path");