如何在C#的API请求中传递CSV、XLSX、XML类型文件,有实现示例吗?
解决方案
可选的两种主流实现方案
方案1:Base64字符串编码(兼容现有JSON序列化流程,优先选择)
JSON原生支持字符串类型,你只需要把文件读为字节数组再转成Base64字符串,就能直接放入参数模型中,用现有JSON序列化函数即可正常处理,CSV、xlsx、XML三类文件通用,不需要区分文件类型。
实现示例:
// 定义请求参数模型,可兼容原有业务参数结构 public class FileUploadRequest { // 你的原有业务参数 public int UserId { get; set; } public string BizType { get; set; } // 新增文件相关字段 public string FileBase64 { get; set; } public string FileName { get; set; } // 可选:文件MIME类型,供后端校验使用 public string ContentType { get; set; } }
// 任意类型文件转Base64的通用方法 public string FileToBase64(string filePath) { byte[] fileBytes = File.ReadAllBytes(filePath); return Convert.ToBase64String(fileBytes); } // 调用示例 var requestParam = new FileUploadRequest { UserId = 123, BizType = "data_import", FileBase64 = FileToBase64(@"C:\test\data.xlsx"), FileName = "data.xlsx", ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" }; // 直接调用你现有的JSON序列化函数处理参数即可,和原有传参逻辑完全一致 string jsonBody = YourExistingJsonSerializeFunction(requestParam); // 后续正常发送POST请求即可,后端拿到Base64解码后即可还原文件
注意事项:
- 适合单文件100M以内的场景,Base64编码会让文件体积膨胀约33%,过大文件会导致请求体超负载
- 后端无需区分文件类型,统一做Base64解码即可还原文件
方案2:Stream + MultipartFormDataContent(适合大文件场景)
如果文件体积较大无法接受Base64的体积膨胀,可以使用Stream方案直接构造multipart表单请求,无需走现有JSON序列化流程。
实现示例:
public async Task UploadFileWithStream(string apiUrl, string filePath, Dictionary<string, string> otherBizParams) { using var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read); using var content = new MultipartFormDataContent(); // 添加文件流内容 content.Add(new StreamContent(fileStream), "file", Path.GetFileName(filePath)); // 添加原有业务参数 foreach (var param in otherBizParams) { content.Add(new StringContent(param.Value), param.Key); } using var httpClient = new HttpClient(); var response = await httpClient.PostAsync(apiUrl, content); response.EnsureSuccessStatusCode(); } // 调用示例 var bizParams = new Dictionary<string, string> { {"UserId", "123"}, {"BizType", "data_import"} }; await UploadFileWithStream("https://你的接口地址/upload", @"C:\test\data.csv", bizParams);
注意事项:
- 该方案需要后端接口支持
multipart/form-data类型的请求,若现有接口仅接收JSON请求体无法直接使用 - 大文件场景下内存占用远低于Base64方案,可配合分片上传逻辑使用
- 同样无需区分CSV/XLSX/XML文件类型,通用适用
以上两种方案均不需要解析文件内容,所有类型文件均以二进制形式读取转换即可。
内容的提问来源于stack exchange,提问作者Đức Tú
相关产品推荐
相关产品推荐

