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

使用Xamarin.Forms向Strapi上传图片触发Files are empty错误如何解决

错误原因

  • Strapi内置上传接口要求上传文件对应的表单字段名为files,你的代码中调用mt.Add时传入的字段名是image,接口无法识别到上传的文件,因此返回文件为空的错误。
  • 你为StreamContent错误添加了files头,没有正确设置图片对应的Content-Type MIME类型,也可能导致接口解析文件失败。
  • 多次调用photo.GetStream()会生成不同的流实例,之前设置的Position = 0不会作用到后续创建StreamContent用到的流上,可能导致上传的流内容为空。

解决方法

按照如下规则修正上传代码即可:

  1. 复用GetStream()返回的流实例,避免多次调用产生异常
  2. 正确设置图片流的Content-Type头
  3. 表单上传文件的字段名修改为files

修正后的完整上传代码:

HttpClient httpClient = new HttpClient();
MultipartFormDataContent mt = new MultipartFormDataContent();

// 复用流对象,避免多次调用GetStream生成不同实例
var imageStream = photo.GetStream();
imageStream.Position = 0;
StreamContent imagePart = new StreamContent(imageStream);
// 正确设置图片的MIME类型
imagePart.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/jpeg");
// 表单字段名改为Strapi要求的files
mt.Add(imagePart, "files", "bsk.jpeg");

// 如果需要直接将图片绑定到Strapi对应内容类型的指定字段,可额外添加以下参数
// mt.Add(new StringContent("你的内容类型标识,比如Product"), "ref");
// mt.Add(new StringContent("对应内容条目的ID,比如10"), "refId");
// mt.Add(new StringContent("内容类型中存储图片的字段名,比如product_pic"), "field");

var response = await httpClient.PostAsync("http://111.111.111.111:2222/upload", mt);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:45:02