使用Refit上传文件时收到0长度文件的问题求助
解决Refit多部分上传文件时服务器接收空文件的问题
核心原因
服务器能接收到正确文件名但文件长度为0,说明客户端发送的流未包含实际内容,大概率是文件流的读取位置不在起始点,导致Refit读取流时未获取到任何数据。
修复步骤及代码
1. 重置文件流位置
在创建StreamPart前,强制将FileStream的Position设置为0,确保从文件开头读取内容。
2. 显式指定Content-Type
使用StreamPart的完整构造函数指定文件的MIME类型,帮助Refit正确构造多部分表单请求。
修正后的客户端代码:
public async Task SaveProjectToCloudAsync() { using (var fileStream = new FileStream(_pdProject.currentFilePath, FileMode.Open)) { // 重置流到起始位置 fileStream.Position = 0; // 初始化StreamPart时指定文件名和通用二进制Content-Type var streamPart = new StreamPart(fileStream, "project.pd", "application/octet-stream"); var response = await _projectApi.SaveFileAsync(streamPart, _projectToSave.Id); } }
额外排查建议
- 验证本地文件
_pdProject.currentFilePath本身是否为空,排除源文件问题 - 检查Refit版本,升级到最新稳定版避免已知的上传bug
- 服务器端可添加日志输出
projectFile.ContentLength和projectFile.Length,确认数据是否真的未传输
内容的提问来源于stack exchange,提问作者Sar.Dmitry
相关产品推荐
相关产品推荐

