使用Guzzle使用文件上传数据-Laravel

时间:2019-02-03 11:40:32

标签: php laravel

我正在将文件上传到基于laravel构建的API。在下面的代码中,数据被发送到API。但是,如何获取上传到API的文件?

控制器

$file = $request->file('imported-file');
        $name = $file->getClientOriginalName();
        $path ='/Users/desktop/Folder/laravelapp/public/Voice/';
        $client = new \GuzzleHttp\Client();
        $fileinfo = array(
            'message'          =>  'Testing content',
            'recipient'  =>  "102425",
        );

        $res = $client->request('POST', $url, [
            'multipart' => [
                [
                    'name'     => 'FileContents',
                    'contents' => file_get_contents($path . $name),
                    'filename' => $name
                ],
                [
                    'name'     => 'FileInfo',
                    'contents' => json_encode($fileinfo)
                ]
            ],
        ]);

API控制器

        if (!empty('FileInfo')) {
            return response()->json([
                'status' => 'error',
                'file_content' => $request->file('FileContents'),
                'media'=>$request->hasFile('FileContents'),
            ]);
        }

这是回应,我得到"file":null,"file_content":{},"media":true

media显示真实含义时,为什么文件内容为空?

1 个答案:

答案 0 :(得分:0)

可能有多种原因:

  • 检查您的内容类型。有时我们忘记指定multipart / form-data,而请求使用通用的application / x-form-urlencoded等发送。
  • 第二,如果您使用的是jQuery,则设置:

contentType:否, processData:否, 缓存:false

这将帮助您的表单请求不转换为字符串有效负载,也不会强制ajax设置内容类型。尝试使用FormData。

更新:在this post中找到类似的答案对此有详细的答案。