【问题标题】:How to upload files through laravel api routes如何通过 laravel api 路由上传文件
【发布时间】:2017-07-06 10:51:06
【问题描述】:

我正在创建一个 api 来上传文件。当我通过网络路由文件上传它们时它可以工作,但是当我通过 api 路由文件上传它们时它不起作用。

axios.defaults.headers.put['Content-Type'] = 'multipart/form-data';
axios.put('/api/pikirler', formData);

如果我将其更改为:

axios.defaults.headers.post['Content-Type'] = 'multipart/form-data';
axios.post('/upload', formData);

它工作正常。但我想在 api 路由中使用它。

【问题讨论】:

    标签: laravel vue.js axios


    【解决方案1】:

    您可以在控制器中使用 guzzle 包。以下是使用 guzzle 上传文件的代码。

    $options = [
          'multipart' => [
            [
              'name' => 'user_key'
            ],
            [
              'name' => 'file_names',
              'contents' => '[]'
            ],
            [
              'name' => 'file',
              'contents' => file_get_contents($filePath),
              'filename' => $fileName,
              'headers'  => [
                'Content-Type' => 'application/octet-stream'
              ]
            ]
          ]
        ];
    
          $httpClient = new GuzzleClient();
          $response   = $httpClient->request("POST", "someApiUrl", $options);
    

    以下是文档。 http://docs.guzzlephp.org/en/latest/overview.html

    【讨论】:

    • 我不能只用axios通过更改标题来上传吗?
    • 我没有尝试 axios。 @AzatAkmyradov。我通常使用 guzzle。
    • 谢谢,我试试看。但是,如果我能找到如何使用 axios 来做到这一点,那就太好了
    • OP 正在谈论从客户端发布,使用 javascript 的 axios。这个答案是关于使用 PHP 从服务器端使用 guzzle。完全无关。 OP 我相信 API 路由只需要 json 数据。您想将其更改为接受 multipart/form-data,这可能在 laravel 的某个地方可以更改,我还没有找到在哪里。或者只使用 axios 中的 JSON 而不是表单数据
    猜你喜欢
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 2021-10-18
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 2022-11-09
    • 2019-03-18
    相关资源
    最近更新 更多