React结合Laravel8 Sanctum使用react-dropzone上传文件后端接收为空求助
问题原因及解决方案
- 多文件上传FormData键名错误
你现在追加文件用的键名是images,要接收多文件数组的话,需要把键名改为images[],否则每次追加文件都会覆盖上一个,Laravel也无法正确识别为多文件集合,修改代码如下:files.map((file) => data.append("images[]", file)); - Laravel接收文件的方法错误
上传的文件属于二进制请求内容,不会包含在$request->all()的返回结果中,你需要用Laravel提供的文件接收方法来获取:// 先判断是否有上传文件 if ($request->hasFile('images')) { // 获取全部上传的图片文件 $images = $request->file('images'); // 单文件处理可以用 $request->file('images')[0] } - 检查请求头配置
如果你在headers里手动指定了Content-Type: multipart/form-data,请删掉这个配置。axios发送FormData时会自动生成带boundary标识的Content-Type,手动指定反而会导致服务器无法正确解析文件内容。 - 额外排查项
- 确认你的apiClient配置里开启了
withCredentials: true,否则Sanctum的CSRF校验和认证会失效,导致请求参数解析异常 - 检查PHP配置里的
upload_max_filesize和post_max_size参数,确认值大于你上传的文件总大小,超过限制的文件会被服务端过滤 - 追加FormData时可以直接使用dropzone返回的原生acceptedFiles对象,避免你给file对象额外添加的preview属性影响文件解析
- 确认你的apiClient配置里开启了
内容的提问来源于stack exchange,提问作者Hamza Afzal
相关产品推荐
相关产品推荐

