【问题标题】:How to use PUT method in Laravel API with File Upload如何在 Laravel API 中通过文件上传使用 PUT 方法
【发布时间】:2021-03-08 13:02:03
【问题描述】:

已阅读此 SO link

PUT 最常用于更新功能,PUT 到已知资源 URI,请求正文包含原始资源的新更新表示。

From this answer,

...我们需要再次发送所有数据的参数。

在我的控制器中,我有:

$student = Student::find($student_id);
$student->username = $request->username;
$student->email = $request->email;
$student->password = $request->password;
$path = $request->file('passport')->store('upload');
$student->passport = $path;

我曾经在 POST 方法中使用过相同的代码,并且它有效,但是在将它用于 API 时,我使用 POSTMAN form-data 并得到 $request->all()null。有人说我应该使用x-www-form-urlencoded,但这不允许文件上传。

【问题讨论】:

    标签: laravel api put


    【解决方案1】:

    这实际上是一个incapability of PHP itself。带有 multipart/form-data 的 PUT/PATCH 请求只是不会填充 $_FILES,因此 Laravel 没有什么可处理的。

    每隔一段时间,当人们发现 $request->all() 返回 null 时,人们会报告错误 like this,认为这是 Laravel 的错,但 Laravel 没办法。

    文件最好以multipart/form-data 发送,如果是POST,则会填充$_FILES。没有$_FILES,没有$request->file()

    如果它使用 POST 来代替 PHP 中的预期工作,则只需使用 POST。

    【讨论】:

      【解决方案2】:

      当表单包含上传的文件时,它仅适用于 POST 方法 - 可能是 PHP/Laravel 的问题

      如果有人想对包含文件上传的表单使用 PUT 或 PATCH 请求

      <form action="/foo/bar" method="POST">
          @method('PUT')
      
          ...
      </form>
      

      通过任何 javascript 框架,如 vue

      let data = new FormData;
      data.append("_method", "PUT")
      
      axios.post("some/url", data)
      

      使用_method 并将其设置为“PUT”或“PATCH”将允许将路由声明为 PUT 路由并仍然使用 POST 请求提交表单数据

      我已经回答了类似的问题How to update image with PUT method in Laravel REST API?

      【讨论】:

      • 这很有用:) tx
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-16
      • 1970-01-01
      • 2018-03-06
      • 2020-04-06
      • 2019-07-27
      • 2016-12-01
      • 2012-03-03
      相关资源
      最近更新 更多