laravel - 无法从 vue 读取 Laravel 控制器中的文件列表对象
问题描述
我正在创建一个应用程序,用户正在填写一个可以发送多个文件的表单
在 vue.js 中,我使用文件数组和带有其余输入字段的对象创建 formData。我正在用 Axios 发布它。在 Laravel 控制器的请求中,我无法访问我的文件列表对象。我可以看到
$request->My_Array,
但我可以读取里面的数据存储,我也尝试过使用循环:
$request->all();
$request->file('files');
我的意见
<input class="browse" V-on::change="onImageChange" type="file">
我的 vue.js 组件
onImageChange(event) {
this.files.push(event.target.files);
},
submit(e) {
e.preventDefault();
let currentObj = this;
const fd = new FormData();
for (let i = 0; i < this.files.length; i++) {
fd.append('IoFiles[]', this.files[i]);
}
console.log(this.files);
fd.append('IoFiles', this.files);
fd.append('fields', JSON.stringify(this.fields));
axios.post('/io',
fd,
{headers: {'Content-Type': 'multipart/form-data'}})
.then(function (response) {
currentObj.output = response.data;
})
.catch(function (error) {
currentObj.output = error;
});
},
我的 Laravel 控制器
public function store(Request $request)
{
if ($request->IoFiles) {
$medias = $request->IoFiles;
foreach ($medias as $image) {
return $image->getClientOriginalName();//That give me an error
}
}
}
解决方案
您的代码有几个问题。
首先,V-on::change="onImageChange"
应该是:
v-on:change="onImageChange"
请注意:
- 小写
v
为v-on
- 单人
:
或者,您可以编写@change="onImageChange"
.
其次,event.target.files
返回FileList
不是单个文件,因此您需要将onImageChange
代码更改为以下内容才能获取文件本身:
onImageChange(event) {
this.files.push(event.target.files[0]); //Note the [0] after files
},
推荐阅读
- amazon-web-services - 如何从本地 SSH ----> 跳转框 ----> 私有子网
- c# - 我尝试在 *somee.com* 上托管一个 ASP.NET C# Web 应用程序,但我无法正确显示我的主页
- git - Git:新存储库,尝试从系统推送现有存储库时出错
- vue.js - 资产文件夹只是返回主页
- python - Django中的多对多关系
- linux - 将数组变量传入和传出嵌套的 bash 脚本
- kotlin - 无法更改 mutableListOf( ) 值
- java - 如何在 UML 中显示一个类与 java.lang 类的关系?
- javascript - 错误:不知道如何处理这种类型的突变。突变不遵循命名约定
- sql-server - 开始/结束日期间隙和散布无效记录的孤岛,按组