【问题标题】:Laravel file upload over API HTTP PUT works locally but does not on AWS通过 API HTTP PUT 上传 Laravel 文件在本地工作,但在 AWS 上不工作
【发布时间】:2021-07-16 19:48:05
【问题描述】:

我有一个简单的 Laravel 应用程序,带有用于文件上传的端点。

当我调用 POST 端点创建(和上传)全新文件时,一切都在本地(docker)和 AWS 上运行。

我使用有效载荷将HTTP POST 转换为api/file

我从桌面选择文件,提供名称、类型和模型的 UUID(多态关系)。

但是……当我想覆盖这个文件时,我有一个 HTTP PUT 端点:api/file/<UUID OF PREVIOUSLY UPLOADED FILE> 和有效载荷:

这个问题很奇怪,因为我没有遇到任何 PHP 问题。 Laravel 根本无法通过验证,因为它以某种方式完全看不到 AWS 上的有效负载。在本地(docker)上,这没有任何问题。

我很确定这与 AWS 相关,但我已经没有线索了,罪魁祸首是什么。下面是验证消息包,但我发誓我通过了typemodel_uuid(截图编号 2)。

{
    "error": [
        "Model type is required.",
        "Model UUID is required."
    ]
}

【问题讨论】:

  • 您是否也在 aws 上为您的 POST 端点尝试了相同的文件?在 aws 中是否有任何 waf 设置来阻止 PUT 方法或文件大小限制?

标签: php laravel amazon-web-services


【解决方案1】:

据我所知,使用html表单标准,您只能使用GETPOST进行表单提交。在这里,您发送的表单数据被视为带有PUT 的表单,这是不可接受的。

所以你有两个选择,要么切换到POST,要么做一个 Laravel 支持的方法欺骗

对于方法欺骗,使您的请求动词 POST 并在您的表单数据中添加一个带有值 PUT_method 输入。基本上你正在发送一个 POST 请求,但 Laravel 请求处理程序会在内部假定它为PUT。您可以将您的路线定义为Route::put(....)

Laravel 内核中的方法覆盖,发生在 here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 2019-04-20
    • 2017-06-05
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多