0

0

C#大文件上传方法 C#如何实现分片上传大文件

煙雲

煙雲

发布时间:2026-02-22 12:21:10

|

952人浏览过

|

来源于php中文网

原创

分片上传需前后端协同实现:前端按2–5mb切片并传fileid、chunkindex、totalchunks及哈希值;后端绕过iformfile,流式读取+幂等写入+分片校验+状态持久化+及时清理。

c#大文件上传方法 c#如何实现分片上传大文件

分片上传必须自己实现前后端协同

ASP.NET Core 默认的 IFormFile 无法处理 GB 级文件,服务端会直接拒绝或超时。分片不是加个配置就能开的开关,它要求前端按固定大小切片、携带序号和唯一标识(如 fileId),后端按序接收、暂存、校验,最后合并。跳过任一环节都会导致文件损坏或丢失。

  • 前端切片常用 File.slice()(浏览器)或 FileStream.Read() + 缓冲区(桌面端),单片建议 2–5 MB,太小增加 HTTP 开销,太大降低失败重传效率
  • 每次请求必须带至少三个关键字段:fileId(整个文件唯一 ID)、chunkIndex(从 0 开始)、totalChunks
  • 后端不能依赖请求顺序——HTTP 不保证顺序到达,需用 fileId + chunkIndex 做幂等写入,重复上传同一片应忽略而非报错

后端接收分片要绕过模型绑定和默认限制

直接用 [FromForm]IFormFile 会触发 ASP.NET Core 的完整文件读取和内存缓冲,大文件直接 OOM。必须改用 Request.Body 流式读取,并手动解析 multipart boundary。

  • 禁用默认限制:在 Startup.csProgram.cs 中调用 ConfigureKestrel 设置 MaxRequestBodySize = long.MaxValue,同时在控制器上加 [RequestSizeLimit(long.MaxValue)]
  • 禁用模型绑定:方法签名不要含 IFormFile,改用 HttpRequest.Body + MultipartReader 解析,参考 Microsoft.AspNetCore.WebUtilities.MultipartReader
  • 每片写入临时目录时,文件名建议为 {fileId}_{chunkIndex},避免并发写入冲突;不要用 MemoryStream 缓存整片内容

合并前必须做 MD5 或 SHA256 分片校验

网络传输中单片出错很常见,但用户往往只看到“上传完成”,实际文件已损坏。仅靠文件大小一致无法判断内容正确性。

商易多用户商城
商易多用户商城

功能介绍:1. 商品出售包含拍卖模式,一口价模式。2. 全套系统采用淘宝网风格,成熟,简洁大方3. 每个商品支持多张图片上传,可自由设定,满足广大网民的迫切要求4. 商品信息支持 ubb,图文并茂5. 注册用户可参与竞拍,或者拍卖自己的商品6. 拥有会员注册,交易提醒,成交商品确认等邮件发送功能7. 拥有交易双方信用评价的功能,使得交易安全可*,可信度高8. 拥有安全稳定的用户虚拟币平台,可实现商

下载
  • 前端应在切片前计算整个文件的 fileHash,并随首片一起发送;每片上传时额外提交该片的 chunkHash
  • 后端保存每片时同步计算其哈希值,与前端传来的 chunkHash 比对,不一致则返回 400 Bad Request 并记录日志
  • 合并操作仅在所有片校验通过、且 chunkIndex 连续覆盖 0..totalChunks-1 后才执行,否则返回 409 Conflict

断点续传依赖服务端状态持久化

如果只把分片存在本地磁盘,IIS 重启或 Kestrel 进程崩溃后,已上传的分片就丢了,用户只能重头来。真正的断点续传需要可恢复的状态记录。

  • 用轻量数据库(如 SQLite 或 Redis)存元数据:fileIdtotalChunksreceivedChunks(位图或集合)、status(uploading / merged / failed)
  • 前端发起上传前先发 HEAD /api/upload?fileId=xxx 查询已传片数,服务端返回 206 Partial Content 和已接收的 chunkIndex 列表
  • 合并完成后立即删临时分片文件,并将 status 改为 merged;失败时保留状态供重试,但需加 TTL 防止磁盘被占满

最易被忽略的是分片命名和清理时机——用时间戳或随机数作临时文件名,会导致无法关联同一文件的分片;合并成功后没删分片,几天下来磁盘就满了。这些细节不写进逻辑,系统迟早出问题。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
go语言 数组和切片
go语言 数组和切片

本专题整合了go语言数组和切片的区别与含义,阅读专题下面的文章了解更多详细内容。

49

2025.09.03

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

998

2023.11.02

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

663

2023.11.14

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

499

2024.04.02

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

408

2024.04.07

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

404

2024.04.07

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

467

2024.04.07

redis缓存一般存些什么数据
redis缓存一般存些什么数据

redis缓存中存储的数据类型包括:字符串、哈希、列表、集合、有序集合、位图、地理空间数据和hyperloglog。这些数据类型适用于存储各种数据,从简单信息到复杂对象和地理位置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

418

2024.04.07

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

928

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C# 教程
C# 教程

共94课时 | 9.9万人学习

C 教程
C 教程

共75课时 | 4.9万人学习

C++教程
C++教程

共115课时 | 18.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号