You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

API中大于4KB的文件上传后损坏或为空的问题求助

解决ASP.NET Core文件上传中大于4KB文件损坏/为空的问题

看起来你遇到的这个问题在ASP.NET Core文件上传场景里挺常见的,尤其是手动处理Multipart请求时容易踩坑。我来帮你梳理几个最可能的原因和对应的修复方案:

1. 未配置合适的请求体大小限制

ASP.NET Core默认对请求体和Multipart文件有大小限制,超过限制的文件会被截断,直接导致损坏或为空。

你需要在项目的Program.cs(.NET 6+)或Startup.cs(旧版本)中调整配置:

builder.Services.Configure<FormOptions>(options =>
{
    // 设置单个Multipart文件的最大大小,示例为100MB,按需调整
    options.MultipartBodyLengthLimit = 104857600;
    // 设置整个请求体的最大大小
    options.ValueLengthLimit = 104857600;
});

同时要检查控制器/Action上是否有[RequestSizeLimit]这类单独限制的特性,如果有,也要同步调整到匹配的数值。

2. 文件流读取不完整

从你给出的代码片段看,你在遍历Request.Form.Files,但如果文件流的写入逻辑不完整,会直接导致内容缺失。

确保写入文件的代码是完整且正确的:

foreach (var formFile in Request.Form.Files)
{
    if (formFile.Length <= 0) continue;

    var fileName = Path.GetFileName(formFile.FileName);
    var fullSavePath = Path.Combine(filePath, fileName);
    
    // 必须用using包裹流,确保资源被正确释放,且完整写入
    using (var fileStream = new FileStream(fullSavePath, FileMode.Create))
    {
        await formFile.CopyToAsync(fileStream);
    }
    tempFileName.Add(fileName);
}

如果是手动读取Request.Body而非依赖Form.Files,更要注意必须完整读取整个Multipart内容,不能提前终止流的读取。

3. 存储目录权限或空间问题

检查你指定的TempUploads目录:

  • 确保应用程序池的运行身份拥有该目录的读写权限
  • 确认目录所在磁盘有足够的存储空间,避免因空间不足导致写入中断

可以尝试更换一个测试目录(比如桌面的临时文件夹),验证是否是权限或空间问题。

4. 客户端请求异常

有时候问题出在客户端而非服务端:

  • 用Postman、curl等工具测试大文件上传,排除客户端代码的问题
  • 示例curl命令:
curl -X POST -F "file=@your_large_file.test" https://your-api-endpoint-url

如果工具上传正常,就需要检查客户端的请求逻辑是否存在中断、未完整发送请求的情况。

先试试上面这几个方案,应该能解决大部分大于4KB文件损坏的问题。如果还是不行,可以把完整的控制器代码贴出来,我再帮你排查更细节的问题。

内容的提问来源于stack exchange,提问作者Rep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:45:25