在Aspnet5 RC1中,Web应用程序,
考虑一个简单的Web应用程序
如何上传文件?
没有使用cshtml,只是一个调用控制器动作的简单html文件
sample.html
<html>
<body>
<form id="form1" method="post" action="Sample/Index">
<input type="file" name="files" multiple />
<input type="submit" value="Upload" />
</form>
</body>
</html>
SampleController.cs
[Route("[controller]")]
public class Sample : Controller
{
[HttpPost("Index")]
public async Task<IActionResult> Index(ICollection<IFormFile> files)
{
foreach (var file in files)
{
if (file.Length > 0)
{
var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
await file.SaveAsAsync(Path.Combine("G:\\", fileName));
}
}
return Ok();
}
}
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app)
{
app.UseIISPlatformHandler();
app.UseStaticFiles();
app.UseMvc();
}
加载了sample.html,
从文件上传控件中选择1个或多个文件
单击提交按钮时,控制流程将进入操作
在索引操作中,选择了多少文件, ICollection&lt; IFormFile&gt;文件始终为0.
无法在服务器端获取上传的文件。
答案 0 :(得分:2)
以下是一个示例html:
<form method="post" asp-action="Index" asp-controller="Home" enctype="multipart/form-data">
<input type="file" name="files" multiple/>
<input type="submit" value="Upload" />
</form>
或
<form method="post" action="@Url.Action("Index", "Home")">
<input type="file" name="files" multiple />
<input type="submit" value="Upload" />
</form>
如果您不想使用Url.Action,请将其放在正确的网址上。
以下是代码:
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();
}
}
}
控制器添加了一个构造函数,它将IHostingEnvironment作为参数。 IHostingEnvironment是一种服务,它通过WebRootPath属性提供一些有用的环境信息,例如wwwroot文件夹的当前文件路径。指定保存上传文件的位置时需要这样做。
答案 1 :(得分:1)
查看此博文:http://damienbod.com/2015/12/05/asp-net-5-mvc-6-file-upload-with-ms-sql-server-filetable/
他正在使用Web API,但这应该不是问题。他也使用简单的HTML表单(但是使用razor还是纯HTML并不重要)