使用Xamarin.Forms向Strapi上传图片触发Files are empty错误如何解决
错误原因
- Strapi内置上传接口要求上传文件对应的表单字段名为
files,你的代码中调用mt.Add时传入的字段名是image,接口无法识别到上传的文件,因此返回文件为空的错误。 - 你为
StreamContent错误添加了files头,没有正确设置图片对应的Content-TypeMIME类型,也可能导致接口解析文件失败。 - 多次调用
photo.GetStream()会生成不同的流实例,之前设置的Position = 0不会作用到后续创建StreamContent用到的流上,可能导致上传的流内容为空。
解决方法
按照如下规则修正上传代码即可:
- 复用
GetStream()返回的流实例,避免多次调用产生异常 - 正确设置图片流的Content-Type头
- 表单上传文件的字段名修改为
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
相关产品推荐
相关产品推荐

