axios / laravel / formdata发布请求为空

Gre*_*nov 2 form-data laravel-5 axios vuejs2

我想上传一些文件,但是当我使用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);
  },
Run Code Online (Sandbox Code Playgroud)

从控制台输出,所有文件都循环并附加到formData 从控制台输出,所有文件都循环并附加到formData

save(formData) {
    photosApi.storePhotos(formData, this.galleryId).then((response) =>     {
        console.log(response);
    }).catch((error) => {
        console.log(error);
    });
},
Run Code Online (Sandbox Code Playgroud)

vuejs:photosApi.js

storePhotos(formData, id) {
    return axios.post(`api/photo/${id}`, formData);
},
Run Code Online (Sandbox Code Playgroud)

当我检查我的api调用时,我看到了 当我检查我的api调用时,我看到了

laravel:api.php

Route::post('/photo/{id}',  'PhotoController@store');
Run Code Online (Sandbox Code Playgroud)

laravel:PhotoController.php

public function store(Request $request, $id)
{
    return $request->all(); 
}
Run Code Online (Sandbox Code Playgroud)

我的回应只不过是空的... 我的回应只不过是空的...

我在做什么错?

Gre*_*nov 5

我终于解决了:)

第一个问题是这条线

formData.append('files', fileList[i], fileList[i].name);
Run Code Online (Sandbox Code Playgroud)

append始终会覆盖最后的“文件”条目...(我认为它的工作方式类似于push)

所以第一个解决方法是

formData.append(`file${i}`, fileList[i], fileList[i].name);
Run Code Online (Sandbox Code Playgroud)

看数据不使用

return $request->all();
Run Code Online (Sandbox Code Playgroud)

改为使用

print_r($request->all());
Run Code Online (Sandbox Code Playgroud)

现在,当您检查apicall时,您会看到有用的东西

在此处输入图片说明

现在很容易

$data = $request->all();
foreach ($data as $key => $file) {
    $file->move('/public/images', $file->getClientOriginalName());
};
Run Code Online (Sandbox Code Playgroud)

我所有的文件都存储在我的文件夹中;)

更新: 我发现,如果我用“ []”写文件,那么我也将数据作为数组

for (let i = 0; i < fileList.length; i += 1) {
    formData.append('files[]', fileList[i], fileList[i].name);
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我可以通过此行访问我的文件,但没有“ []”

$files = $request->file('files');
Run Code Online (Sandbox Code Playgroud)