如何将IFormFile传递给我的服务层?

时间:2018-04-03 22:33:32

标签: c# asp.net-mvc asp.net-core-2.0

我正在研究ASP.NET Core 2 MVC应用程序,尝试设置服务层。我有一个非常基本的应用程序,我想:

  • 将图片与名称一起上传
  • 向数据库添加记录
  • 将文件存储在wwwroot文件夹中的磁盘上,其命名约定与我刚刚添加的记录的主键相对应。

现在我已经通过viewmodel在我的控制器中完成了所有工作。但我想在我的服务层中使用一个很好的方法来同时执行数据库添加和文件系统添加,但是我找不到将文件传递给服务的方法。

我想出了如何在服务层中添加数据库,但不知道如何在那里使用它来执行任何操作。

这是我的控制者:

    [HttpPost]
    public async Task<IActionResult> Create(CreateMentorViewModel model)
    {

        var mentor = new Mentor
        {
            FirstName = model.FirstName,
            LastName = model.LastName,
            Created = DateTime.Now,
        };

        _ctx.Add(mentor);
        await _ctx.SaveChangesAsync();

        int newid = mentor.Id;

        if (model.Image != null)
        {
            var uploads = Path.Combine(_hostingEnvironment.WebRootPath, "img/profilepics");
            var fileId = newid + ".jpg"; 
            var filePath = Path.Combine(uploads, fileId);
            model.Image.CopyTo(new FileStream(filePath, FileMode.Create));
        }
        return RedirectToAction("Index", "Mentor");

    }

我正在寻找的是关于如何将文件从控制器中的viewmodel发送到服务的一些指示,或者更多的指示 - 我应该这样做吗? ?

1 个答案:

答案 0 :(得分:0)

您只需将IFormFile作为参数传递给服务,例如

public void MyMethod(IFormFile file) 
{ 
    ... 
} 

并传递model.Image

[HttpPost]
public async Task<IActionResult> Create(CreateMentorViewModel model)
{
    ...

    myService.MyMethod(model.Image);

    ...
}