C#怎么实现文件上传下载 C#如何用WebAPI实现大文件断点续传功能【网络】

ASP.NET Core 上传大文件需同时配置 IIS 最大请求体和控制器级 RequestSizeLimit;断点续传依赖服务端维护已上传字节数并校验唯一 ID;下载须流式处理避免内存溢出;合并分块需按序拼接并保证原子性。WebAPI 上传大文件时 IFormFile 直接报错或截断ASP.NET Core 默认限制单个请求体大小为 30MB,超过就直接 400 或连接重置,根本进不到控制器逻辑。不是代码写错了,是管道在模型绑定前就拦下了。必须同时改两处配置:Startup.cs(.NET 5+ 在 Program.cs)里加 ConfigureServices 配置:services.Configure<IISOptions>(options => options.MaxRequestBodySize = null);(仅 IIS)全局或控制器级加 RequestSizeLimit(200_000_000) 或更宽松的值(单位字节),且需确保中间件顺序在 UseRouting 之后、UseEndpoints 之前前端 fetch 或 axios 发送时别用 FormData 拼错字段名------后端 FromForm IFormFile file 绑定的字段名必须和表单中 append("file", blob) 的第一个参数完全一致断点续传核心:怎么判断文件块是否已存在并跳过关键不在"传",而在"查"。每次上传前客户端必须先发一个 HEAD 或 GET 请求,带 Range 和文件唯一标识(如 Content-MD5 或自定义 X-Upload-ID),服务端根据这个 ID 查本地临时目录或数据库,返回已接收的字节数(206 Partial Content + Content-Range)或 200 OK 表示全新上传。不要依赖客户端传来的"当前 offset",它可能伪造或错位;服务端必须自己维护每个 X-Upload-ID 对应的已写入长度:用 ConcurrentDictionary<string, long> 存 ID → 已写大小(开发期够用,生产建议换 Redis)写文件时用 FileStream 构造函数指定 FileMode.Append,但注意:必须先 Seek 到指定位置再写,否则会追加在末尾,破坏分块顺序客户端收到 206 后,从 Content-Range 解析出 bytes 0-1048575/2097152 中的 1048576,作为下一块的起始偏移HttpClient 下载大文件卡死或内存爆掉别用 response.Content.ReadAsStringAsync() 或 ReadAsByteArrayAsync()------这是把整个文件读进内存,1GB 文件直接 OOM。下载必须流式处理。正确做法是拿到 HttpContent.ReadAsStreamAsync() 后,用 Stream.CopyToAsync() 直接写入本地文件流: JoinMC智能客服 JoinMC智能客服,帮您熬夜加班,7X24小时全天候智能回复用户消息,自动维护媒体主页,全平台渠道集成管理,电商物流平台一键绑定,让您出海轻松无忧!

相关推荐
浦信仿真大讲堂21 分钟前
从重复操作到自动化闭环:如何让 CST 与 Python 真正协同起来
python·自动化·cst·仿真软件·达索软件
Gu Gu Study1 小时前
ScoutLoop开放域深度研究引擎(agent的初步设计想法)
人工智能·python
神龙天舞20011 小时前
MySQL 备库为什么会延迟好几个小时
android·数据库·mysql
卷无止境2 小时前
写代码这件事,到底该讲究点什么?
后端·python
卷无止境2 小时前
循环复杂度到底在算什么,Python 代码怎么才能写得让人一看就懂
后端·python
lpfasd1232 小时前
MediaCrawler 项目深度分析
chrome·python·chrome devtools
丙氨酸長鏈2 小时前
Web前端入门第 问:JavaScript 一个简单的 IndexedDB 数据库入门示例
前端·javascript·数据库
Dxy12393102162 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
bamb003 小时前
一个项目带你入门AI应用开发01
python
独行侠影a3 小时前
APScheduler+Redis 分布式定时任务:解决多实例任务重复执行
数据库·redis·分布式