Vuex+Laravel:无法将带有 FormData 和 axios 的多个文件发送到服务器端。在服务器端始终为空。这是怎么回事?

Posted

技术标签:

【中文标题】Vuex+Laravel:无法将带有 FormData 和 axios 的多个文件发送到服务器端。在服务器端始终为空。这是怎么回事?【英文标题】:Vuex+Laravel: Can't send multiple files with FormData and axios to server side. Always getting null on server side. What's going on? 【发布时间】:2022-01-10 05:18:10 【问题描述】:

我上一个问题Vuex + Laravel. Why axios sends any values but only not that one, which come's with method's parameter?得到的信息 仅适用于我在 axios 中仅传递一个参数的情况。我还发现了如何使用一个参数成功传递多个文件,但在我的情况下,我必须使用对象才能传递多个参数。所以不是

const response = await axios.post('/posts', data)

我必须使用下一个

const response = await axios.post('/posts', 
                formData:data,
                body:postBody
            )

我认为这很容易,但现在是我找不到解决方案的第 5 个小时。

控制器

public function store(Request $request)
    
        $files = $request->all();
        return var_dump($files);
    

我尝试了很多东西,包括 $request->allFiles() 和 getClientOriginalExtension() 实验。没有结果。 你有什么版本?如何解决这个问题?

重要! 我使用 Laravel、vuex、axios。 我使用不在 FormData 中的文本,因为它是 textArea。如果我可以结合 FormData 中的 textarea 来进行一个参数 axios 调用,那么知道我上面描述的问题是什么对我来说仍然非常重要。

更新

这是 chrome 的有效负载标签

【问题讨论】:

您是否完全确定文件已发送到端点?你能从 chrome 的开发控制台分享你的请求负载吗? @Luciano 没有。这很奇怪。没有对象方法作为单个参数,一切正常,但作为对象 - 没有。我更新了问题。你可以看你想要的截图。 为什么不直接发送 formData 对象中的所有内容?为什么要发送 formData 和数据? @Luciano 如我所见,仅使用一个 FormData 发送所有数据在逻辑上是不正确的。原因 formData 表示数据,属于表单上下文。 Textarea 也许我们可以把它当作表单数据,但是如果我也想发送另一个数据呢? 嗯,简短的回答是“你不能”。就“逻辑正确”而言,您为什么要发送 post 有效载荷,其中包含一些不考虑后操作本身的数据? 【参考方案1】:

目前还不清楚为什么您不在formData 对象中发送您需要的所有内容。

你可以这样做:

const formData = new FormData()

formData.append(body, postBody)
formData.append(files, fileList)
formData.append(otherData, someOtherData)

const response = await axios.post('/posts', formData)

然后在你的服务器端你就可以做

 $body = $request->body;
 $files = $request->files;
 $otherData = $request->otherData;

【讨论】:

这很有帮助,所以我将其标记为有用。

以上是关于Vuex+Laravel:无法将带有 FormData 和 axios 的多个文件发送到服务器端。在服务器端始终为空。这是怎么回事?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Vuex 添加到我的 Laravel Nova 工具中?

带有 Jest 的 Vuex - 无法读取未定义的属性 <getterName>

如何自定义 laravel api 的 json 响应并在 vuex 中显示它们

带有 Vuex 和 Axios 的 NativeScript-Vue 未定义状态错误

带有 Vuex 的 vue-table-2 - 无法更改计数属性

在 Laravel 中对 vuejs 文件的 Vuex 调用函数