axios/laravel/formdata 发布请求为空

Posted

技术标签:

【中文标题】axios/laravel/formdata 发布请求为空【英文标题】:axios/laravel/formdata post request is empty 【发布时间】:2018-03-22 16:52:39 【问题描述】:

我想上传一些文件,但是当我用axios发布时,我的formdata在laravel中是一个空请求

vuejs: 上传者.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 调用时,我看到了这个

laravel: api.php

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

laravel: PhotoController.php

public function store(Request $request, $id)

    return $request->all(); 

我的回复只是空的...

我做错了什么?

【问题讨论】:

尝试返回json响应。 @pdshah3690 也为空,返回 response()->json($request->all()); @ParthShah with print_r($request->all());你可以检查数据 【参考方案1】:

我终于解决了:)

第一个问题是这一行

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 时看到一些有用的东西

现在很容易

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

【讨论】:

以上是关于axios/laravel/formdata 发布请求为空的主要内容,如果未能解决你的问题,请参考以下文章

发布机制-功能开关发布:百科

以发布模式发布,使用调试配置发布

RedisRedis 发布订阅通信模式 ( 发布订阅模式 | 订阅频道 | 发布消息 | 接收消息 )

蓝绿发布灰度发布和滚动发布

一文了解蓝绿发布/灰度发布/滚动发布

通过 html 表单发布和 Ajax 发布发布数据有啥区别?