【问题标题】:Uploading data with file with Guzzle - Laravel使用 Guzzle 上传带有文件的数据 - Laravel
【发布时间】:2019-02-04 09:07:29
【问题描述】:

我正在将文件上传到基于 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表示真意有文件时,文件内容为空?

【问题讨论】:

  • 如何将文件发送到控制器?

标签: php laravel


【解决方案1】:

可能有多种原因:

  • 检查您的内容类型。有时我们忘记指定 multipart/form-data 并且请求使用通用 application/x-form-urlencoded 等发送。
  • 其次,如果你使用的是 jQuery,那么设置:

内容类型:假, 处理数据:假, 缓存:假

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

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

【讨论】:

    猜你喜欢
    • 2016-04-04
    • 2018-03-24
    • 2021-01-06
    • 2017-06-08
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    相关资源
    最近更新 更多