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

如何在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ú

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:18:04