c# - 如何将 IFormFile 传递到我的服务层?

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

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

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

现在我已经在我的带有 View 模型的 Controller 中正常工作了。但我想在我的服务层中使用一个很好的方法来添加数据库和文件系统,但我没有找到将文件传递给服务的方法。

我想出了如何让数据库也添加到服务层,但没有想出如何让文件在那里做任何事情。

这是我的 Controller :

    [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");

    }

我正在寻找的是关于如何将文件从 Controller 中的 View 模型发送到服务的一些指示,或者可能更重要 - 我是否应该这样做?

最佳答案

您不应在服务层中依赖 ASP.NET。改为传递 Stream:

var result = await myService.ProcessFileAsync(formFile.OpenReadStream());

关于c# - 如何将 IFormFile 传递到我的服务层?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49640044/

相关文章:

c# - 匿名类、临时数据和匿名类的集合

asp.net-mvc - 检查上传的文件是否是 C# ASP.NET MVC 中的图像

c# - 查看帖子中的 PartialView 并返回响应 json

.net-core - 如何为.net core 2.0 webapi设置默认日期时间格式

c# - 建筑中点的X值和Y值四舍五入

c# - 存储具有相同唯一标识符 ("username"的两个域模型(用户)时克服不一致的最佳方法)

c# - Roslyn 获取类的依赖项

c# - Azure Web 部署发布旧版本的 MVC 站点 .dll

angular - 在 .Net Core 2.0 Angular 2 SPA 模板中加载 snazzy-info-window 模块时出错

c# - 如何在 Asp.Net Core 的 ExceptionFilterAttribute 中传递 TempData