Aspnet5文件上传

时间:2016-01-19 05:30:48

标签: c# html .net file-upload asp.net-core

在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.
无法在服务器端获取上传的文件。

2 个答案:

答案 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并不重要)