axios / laravel / formdata post请求为空

时间:2017-10-11 06:15:09

标签: laravel-5 vuejs2 axios form-data

我想上传一些文件,但是当我发布axios时,我的formdata在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 output from console, all files are looped and appended to 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时,我看到了这一点 when i inspect my api-call i see this

laravel:api.php

Route::post('/photo/{id}',  'PhotoController@store');

laravel:PhotoController.php

public function store(Request $request, $id)
{
    return $request->all(); 
}

我回复的回复只是空的...... the return of my response is only empty...

我做错了什么?

1 个答案:

答案 0 :(得分:4)

我最终解决了它:)

第一个问题是这一行

formData.append('files', fileList[i], fileList[i].name);

追加总是覆盖最后的“文件”条目...(我认为它像推动一样工作)

所以第一个修复是

formData.append(`file${i}`, fileList[i], fileList[i].name);

查看数据不使用

return $request->all();

改为使用

print_r($request->all());

现在,当你检查你的apicall时,你可以看到一些有用的东西

enter image description here

现在很容易

$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');