首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将应用程序服务与IFormFile分离

将应用程序服务与IFormFile分离
EN

Stack Overflow用户
提问于 2020-06-29 09:10:36
回答 1查看 556关注 0票数 2

如何将应用程序服务与IFormFile分离,而无需在asp.net核心中进行流复制开销。

代码语言:javascript
复制
    public interface IUploadService
    {
        Task UploadAsync(IFormFile file, CancellationToken cancellationToken = default);
    }

    [HttpPost]
    public async Task<IActionResult> UploadFile([FromServices] IUploadService uploadService)
    {
        foreach(var file in Request.Form.Files)
        {
            await uploadService.UploadAsync(file);
        }

        return Ok();
    }

我需要将UploadAsync方法与IFormFile分离开来,因为应用程序服务层依赖于Microsoft.AspNetCore.Http.Features包,我应该删除它。一种解决方案是将IFormFile复制到文件流或内存流,并将流传递给UploadAsync方法。但是这种方式有流复制开销。我需要解决没有任何开销的解决方案,并将应用程序服务与IFormFile分离。例如,在IFormFile方法中传递UploadAsync流指针和复制流的任何方法。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-06-30 05:23:52

根据拉明的想法。

代码语言:javascript
复制
public interface IFileStream
{
    string Name { get; }

    string FileName { get; }

    string ContentType { get; }

    long Length { get; }

    Task CopyToAsync(Stream target, CancellationToken cancellationToken = default);
}

public interface IUploadService
{
    Task UploadAsync(IFileStream file, CancellationToken cancellationToken = default);
}

并在web项目中实现代理。

代码语言:javascript
复制
public class FormFileProxy : IFileStream
{
    private readonly IFormFile file;

    public FormFileProxy(IFormFile file)
    {
        this.file = file ?? throw new ArgumentNullException(nameof(file));
    }

    public string Name => file.Name;

    public string FileName => file.FileName;

    public string ContentType => file.ContentType;

    public long Length => file.Length;

    public async Task CopyToAsync(Stream target, CancellationToken cancellationToken = default)
    {
        await file.CopyToAsync(target, cancellationToken);
    }
}

然后创建代理模型并将其传递给上传服务。

多亏了所有人。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62634828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档