如何在asp.et核心中获取IFormFile / FormFile对象

时间:2018-06-07 02:17:35

标签: asp.net-core

使用ASP.NET核心2.1,将HttpRequest.Body与上传的文件一起作为MemoryStream。在文档中它说如果我使用asp.net核心webAPI然后可以将该文件作为FormFile对象。就我而言,我没有使用ASP.NET webAPI。有没有办法获取FormFile对象?所有我想知道文件的元数据,如文件名,类型等。一旦它在内存流中,我无法轻易获得这些细节。

感谢您的任何指示。

1 个答案:

答案 0 :(得分:1)

视图模型

public class MyViewModel
{
  [Display(Name = "My File")]
  public IFormFile File { get; set; }
}

查看

@model MyViewModel
<form asp-action="Send" enctype="multipart/form-data">
   <label asp-for="File">Filename:</label>
   <input accept="image/*" title="Choose an image to upload" type="file"  asp-for="File" />
   <input type="submit" />
</form> 

控制器

[HttpPost]
public async Task<IActionResult> Send([Bind("File")] MyViewModel myVM)
{
   if (myVM.File?.Length > 0)
   {
        byte[] fileBytes;
        using (var fileStream = myVM.File.OpenReadStream())
        using (var ms = new MemoryStream())
        {
            fileStream.CopyTo(ms);
            fileBytes = ms.ToArray();
        }

        var fileName = Path.GetFileName(myVM.File.FileName);
        var fileMimeType = myVM.File.ContentType;
        var fileContent = fileBytes;

        //You have all the file attributes and content
   }
}