如何使用Flurl向ASP.NET Core的IFormFileCollection发送文件流列表
实现多文件上传的核心逻辑
你只需要在构建Multipart表单内容时,为每个文件流单独添加对应的表单文件项,且所有文件项的表单名称统一和接口参数名images保持一致即可,后端IFormFileCollection会自动绑定所有同名的文件字段。
示例代码(Flurl.Http扩展的PostMultipartAsync场景)
// 提前准备好的多文件流列表,每个元素对应 流对象、文件名 List<(Stream FileStream, string FileName)> uploadFiles = new List<(Stream, string)> { (File.OpenRead("test1.jpg"), "test1.jpg"), (File.OpenRead("test2.png"), "test2.png"), (File.OpenRead("test3.gif"), "test3.gif") }; var response = await "你的接口请求地址" .PostMultipartAsync(mp => { // 循环批量添加所有文件,全部使用同一个表单名images foreach (var file in uploadFiles) { mp.AddFile("images", file.FileStream, file.FileName); } // 其他表单参数可在此处追加,示例:mp.AddString("remark", "上传备注"); });
示例代码(HttpClient原生调用场景)
using var content = new MultipartFormDataContent(); // 循环添加所有文件 foreach (var file in uploadFiles) { var streamContent = new StreamContent(file.FileStream); // 按实际文件类型设置ContentType,也可以省略不填 streamContent.Headers.ContentType = System.Net.Http.Headers.MediaTypeHeaderValue.Parse("image/jpeg"); content.Add(streamContent, name: "images", fileName: file.FileName); } using var httpClient = new HttpClient(); var response = await httpClient.PostAsync("你的接口请求地址", content);
注意事项
- 所有文件对应的表单字段名必须和后端
[FromForm]标记的参数名完全一致,此处固定为images,否则后端无法绑定到文件集合 - 如果上传大文件,需要提前调整后端的请求大小限制,避免请求被服务器拦截
- 用完的文件流记得及时释放,避免资源泄漏
内容的提问来源于stack exchange,提问作者Kyle M
相关产品推荐
相关产品推荐

