一款适用于.Net的高性能文件上传项目

今天给大家推荐一款开源的适用于.Net的高性能文件上项目UploadStream。

背景

流式多部分文件上传是指将文件分成多个部分,然后逐个部分上传到服务器。这种方式可以减少内存使用,提高上传性能,尤其是在上传大型文件时。

由于微软官方推荐的流式多部分文件上传代码比较复杂,作者对微软官方推荐的流式多部分文件上传代码进行了简化和重写,使其更容易理解和使用。

微软​文档地址:
https://learn.microsoft.com/en-us/aspnet/core/mvc/models/file-uploads?view=aspnetcore-3.1

项目性能结果的报告地址:
https://medium.com/@ma1f/file-streaming-performance-in-dotnet-4dee608dd953

特点

优化多部分流式文件上传性能,提供 10 倍性能提升和 10%-40% 内存分配减少。

默认情况下,.Net模型表单模型绑定使用IEnumerable<IFormFile>将整个流加载到内存中。这对大型文件来说并不理想,因为流的处理应该在流式传输过程中发生,而不是将整个文件(s) 缓冲到内存/磁盘中。

该软件包允许通过委托异步处理上传流(StreamFiles<T>(Action<IFormFile> func)),同时保持通用的模型绑定功能和验证。

简而言之,该软件包可以显著提高大型文件上传的性能和内存效率。

用法

安装包

csharp 复制代码
> install-package UploadStream

定义一个UploadModel

csharp 复制代码
public class UploadModel 
{
	public string Name { get; set; }
    public string Description { get; set; }
    public List<IFormFile> Files { get; set; }
}

使用UploadStream

csharp 复制代码
[HttpPost("upload")]
public async Task<IActionResult> Upload(UploadModel model)
{
    byte[] buffer = new byte[4096];

    foreach (var s in model.Files)
        using (var stream = s.OpenReadStream())
            while (await stream.ReadAsync(buffer, 0, buffer.Length) > 0) ;

    return Ok(new
    {
        model.Name,
        model.Description,
        files = model.Files.Select(x => new {
            x.Name,
            x.FileName,
            x.ContentDisposition,
            x.ContentType,
            x.Length
        })
    });
}

项目地址:

https://github.com/ma1f/uploadstream

相关推荐
L歪歪君 山水甲天12 小时前
Office文件的奥秘——.NET平台下不借助Office实现Word、Powerpoint等文件的解析(1)
word·powerpoint·.net
de之梦-御风12 小时前
【工业自动化平台】 工程设计-依赖注入控制反转(2)
架构·自动化·.net
残月心殇 请珍惜枸15 小时前
.NET陷阱之五:奇怪的OutOfMemoryException——大对象堆引起的问题与对策
java·jvm·.net
冷咖啡离 我的笨笨15 小时前
通过(Node Js||.Net)基于HTML5的WebSocket实现实时视频文字传输(上)
javascript·.net·html5
RD_daoyi2 天前
Google核心算法不再通知!全年持续滚动更新
大数据·服务器·前端·网络·搜索引擎·.net
他们叫我 悦儿遥遥雨2 天前
.NET 8 Web开发入门(六):Blazor 全栈开发——告别 JavaScript 焦虑
前端·javascript·.net
深爱水瓶 血影S狂风2 天前
Linux.NET学习手记(2)
linux·学习·.net
贾天佑忆月 迷失的昵2 天前
.NET Web开发技术简单整理
前端·.net
杰佛史彦明 本王是暴君2 天前
.NET PDB文件到底是什么?
.net
界面开发小八哥3 天前
界面控件DevExpress Office & PDF File v26.1新版亮点 - 全新的条码生成API
pdf·.net·devexpress·ui开发·文档控件·.net 10