如何在ASP.NET 5 RC1 MVC中使用IFormFile保存上传的文件

Art*_*lva 4 c# asp.net asp.net-mvc visual-studio-2015

我在Visual Studio 2015中使用ASP.NET 5 RC.

我定义了一个ViewModel:

public class TeamVM
{
    public IFormFile UploadedLogo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

和一个控制器:

[HttpPost]
public IActionResult Create(TeamVM vm)
{
     vm.UploadedLogo.SaveAs("filename.txt"); // Problem here - There is no SaveAs method
     return View();
}
Run Code Online (Sandbox Code Playgroud)

问题是intellisense表明没有SaveAs()方法.我在这里发现这个接口实际上没有SaveAs()方法.

另外,我意识到,如果我改变IFormFileICollection<IFormFile>和通过,收集循环的IFormFile情况下,将有SaveAs()定义的方法.

在我的情况下,我想用IFormFile而不是ICollection<IFormFile>.

如何将文件保存到系统使用的正确方法IFormFile

Art*_*lva 5

我按照@garethb建议的链接进行操作,并按照建议使用扩展方法.有用!

ASP.NET RC1的解决方案:

要包含的命名空间

using Microsoft.AspNet.Http;
Run Code Online (Sandbox Code Playgroud)

控制器动作

[HttpPost]
public IActionResult Create(TeamVM vm)
{
     FormFileExtensions.SaveAs(vm.UploadedLogo, "C:\pathTofile");
     return View();
}
Run Code Online (Sandbox Code Playgroud)

这个答案归功于@garethb.

ASP.NET RC2的解决方案:

要包含的命名空间

using Microsoft.AspNetCore.Http;
using System.IO;
Run Code Online (Sandbox Code Playgroud)

控制器动作

[HttpPost]
public IActionResult Create(TeamVM vm)
{
     // Make sure the path to the file exists
     vm.UploadedLogo.CopyTo(new FileStream("C:\pathTofile", FileMode.Create));
     return View();
}    
Run Code Online (Sandbox Code Playgroud)