【问题标题】:Passing both a file resource and a json body in a single HTTP POST request在单个 HTTP POST 请求中同时传递文件资源和 json 正文
【发布时间】:2020-02-28 20:23:32
【问题描述】:

我正在构建一个 REST API,并且我有一个端点,我需要在其中传递文件资源和 JSON 正文。显然我做不到:

You can only select one HTTP request method! You asked for both POST.

在 cURL 请求中我同时提供表单字段和这样的正文时出现此错误:

curl -X POST "http://127.0.0.1/path" -F "resource=@img.jpg" -d "@requestBody.json"

如果我想让它工作,我需要将我的请求正文作为表单字段本身传递:

curl -X POST "http://127.0.0.1/path" -F "resource=@img.jpg" -F "myRequestBody=@requestBody.json;type=application/json"

问题是,为了获取此内容,我需要使用 file_get_contents() 函数,然后还对内容进行 json 解码。这不是一个很好的解决方案,而且似乎有点慢。有更清洁的方法吗?

【问题讨论】:

  • 上传文件时,内容类型不应该是multipart/form-data吗?
  • 我认为cURL在检测到-F参数时会自动添加它
  • 不确定当你明确提到type=application/json时它是否会覆盖类型。

标签: php json laravel http curl


【解决方案1】:

根据文件的大小,您可以对数据进行 base64 编码并将其包含在 JSON 有效负载中。

否则,您将需要使用Content-Type: multipart/form-data

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 2020-05-11
    • 2020-01-24
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    相关资源
    最近更新 更多