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

如何用C# HttpClient的PostAsync向函数应用传文件至req.Form.Files

问题原因

你之前的代码错误在于直接用StreamContent设置multipart/form-data类型,这并没有按照multipart表单的格式构造请求体。multipart/form-data需要将每个文件作为独立的请求部分(Part),并通过MultipartFormDataContent来组织这些部分,这样接收端才能识别出req.Form.Files中的文件。

正确实现方式

无论是单个还是多个文件,都需要用MultipartFormDataContent来包装文件内容,每个文件对应一个StreamContent(或ByteArrayContent),并设置对应的文件名和Content-Disposition头。

单个文件上传示例

// 假设stream是你生成的文件流,fileName是文件名
using var client = new HttpClient();
using var multipartContent = new MultipartFormDataContent();

// 创建文件内容部分
using var fileContent = new StreamContent(stream);
fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/octet-stream"); // 根据文件类型设置合适的MIME类型
// 添加到multipart内容中,第一个参数是表单字段名(要和接收端预期的一致,比如"files"),第二个是文件名
multipartContent.Add(fileContent, "files", fileName);

// 发送请求
var response = await client.PostAsync("your-function-app-url", multipartContent);
response.EnsureSuccessStatusCode();

多个文件上传示例

using var client = new HttpClient();
using var multipartContent = new MultipartFormDataContent();

// 假设有多个文件流和文件名的集合,比如List<(Stream Stream, string FileName)> files
foreach (var (stream, fileName) in files)
{
    using var fileContent = new StreamContent(stream);
    fileContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/octet-stream");
    // 注意:如果接收端允许同一个字段名接收多个文件,这里字段名都用"files"即可
    multipartContent.Add(fileContent, "files", fileName);
}

var response = await client.PostAsync("your-function-app-url", multipartContent);
response.EnsureSuccessStatusCode();
关键说明
  • MultipartFormDataContent会自动处理multipart请求的边界(boundary),这是multipart/form-data格式必须的部分,之前的代码缺少这一点,导致接收端无法解析出表单文件。
  • 每个文件部分的Content-Disposition头会被MultipartFormDataContent.Add方法自动设置,包含name(表单字段名)和filename(文件名),这是接收端识别req.Form.Files的关键。
  • 要根据实际文件类型设置ContentType,比如图片用image/jpeg,文本文件用text/plain,如果不确定可以用通用的application/octet-stream。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:25:27