axios/laravel/formdata post 请求为空
axios/laravel/formdata post request is empty
我想上传一些文件,但是当我 post 使用 axios 时,我的表单数据在 laravel
中是一个空请求
vuejs: uploader.vue
filesChange(e) {
const fileList = e.target.files;
const formData = new FormData();
if (!fileList.length) return;
for (let i = 0; i < fileList.length; i += 1) {
console.log(fileList[i]);
formData.append('files', fileList[i], fileList[i].name);
}
this.save(formData);
},
控制台输出,所有文件循环并附加到 formData
save(formData) {
photosApi.storePhotos(formData, this.galleryId).then((response) => {
console.log(response);
}).catch((error) => {
console.log(error);
});
},
vuejs: photosApi.js
storePhotos(formData, id) {
return axios.post(`api/photo/${id}`, formData);
},
当我检查我的 api-call 时,我看到了这个
laravel: api.php
Route::post('/photo/{id}', 'PhotoController@store');
laravel: PhotoController.php
public function store(Request $request, $id)
{
return $request->all();
}
我的回复return只是空的...
我做错了什么?
我终于解决了:)
第一个问题是这一行
formData.append('files', fileList[i], fileList[i].name);
append 总是覆盖最后一个 "files" 条目...(我认为它像推送一样工作)
所以第一个修复是
formData.append(`file${i}`, fileList[i], fileList[i].name);
看数据不用
return $request->all();
改为使用
print_r($request->all());
现在您可以在检查您的 APICALL 时看到有用的东西
现在很容易
$data = $request->all();
foreach ($data as $key => $file) {
$file->move('/public/images', $file->getClientOriginalName());
};
我的所有文件都存储在我的文件夹中 ;)
更新:
我发现,如果我用“[]”写入文件,那么我也会得到数组形式的数据
for (let i = 0; i < fileList.length; i += 1) {
formData.append('files[]', fileList[i], fileList[i].name);
}
在我的控制器中,我可以通过这一行访问我的文件,但没有“[]”
$files = $request->file('files');
我想上传一些文件,但是当我 post 使用 axios 时,我的表单数据在 laravel
中是一个空请求vuejs: uploader.vue
filesChange(e) {
const fileList = e.target.files;
const formData = new FormData();
if (!fileList.length) return;
for (let i = 0; i < fileList.length; i += 1) {
console.log(fileList[i]);
formData.append('files', fileList[i], fileList[i].name);
}
this.save(formData);
},
控制台输出,所有文件循环并附加到 formData
save(formData) {
photosApi.storePhotos(formData, this.galleryId).then((response) => {
console.log(response);
}).catch((error) => {
console.log(error);
});
},
vuejs: photosApi.js
storePhotos(formData, id) {
return axios.post(`api/photo/${id}`, formData);
},
当我检查我的 api-call 时,我看到了这个
laravel: api.php
Route::post('/photo/{id}', 'PhotoController@store');
laravel: PhotoController.php
public function store(Request $request, $id)
{
return $request->all();
}
我的回复return只是空的...
我做错了什么?
我终于解决了:)
第一个问题是这一行
formData.append('files', fileList[i], fileList[i].name);
append 总是覆盖最后一个 "files" 条目...(我认为它像推送一样工作)
所以第一个修复是
formData.append(`file${i}`, fileList[i], fileList[i].name);
看数据不用
return $request->all();
改为使用
print_r($request->all());
现在您可以在检查您的 APICALL 时看到有用的东西
现在很容易
$data = $request->all();
foreach ($data as $key => $file) {
$file->move('/public/images', $file->getClientOriginalName());
};
我的所有文件都存储在我的文件夹中 ;)
更新: 我发现,如果我用“[]”写入文件,那么我也会得到数组形式的数据
for (let i = 0; i < fileList.length; i += 1) {
formData.append('files[]', fileList[i], fileList[i].name);
}
在我的控制器中,我可以通过这一行访问我的文件,但没有“[]”
$files = $request->file('files');