React Native 单次请求上传多张图片时request.FILES为空如何解决?
问题原因
- 直接将图片对象数组append到FormData中:FormData不支持直接序列化普通JS数组,提交时数组会被转为
[object Object]拼接的字符串,后端无法识别为文件类型,因此request.FILES为空。 - 多图处理逻辑的循环下标从1开始:会跳过photos数组的第一个元素,导致第一张图漏传。
- 仅在photos长度大于1时才添加图片字段:判断逻辑覆盖不全,不符合多图上传的通用处理规则。
修复方案
修改后的代码如下:
const createFormData = (photos, body = {}) => { const data = new FormData(); // 移除多余的长度判断,单张、多张统一处理 photos.forEach((photo) => { const fileObj = { name: photo.fileName, type: photo.type, uri: Platform.OS === "ios" ? photo.uri.replace("file://", "") : photo.uri, }; // 每个文件单独append,字段名加[]匹配多数后端框架的多文件解析规则 data.append("images[]", fileObj); }); Object.keys(body).forEach((key) => { data.append(key, body[key]); }); return data; };
额外注意事项
- 发起请求时不要手动设置
Content-Type请求头,浏览器/React Native的请求库会自动生成带boundary标识的multipart/form-data类型头,手动设置会导致boundary丢失,后端无法拆分解析文件。 - 若你使用的后端框架不要求字段名带
[]后缀,可将images[]修改为images,但仍需保持每个文件单独append的写法。
内容的提问来源于stack exchange,提问作者user12314098
相关产品推荐
相关产品推荐

