在单个 HTTP POST 请求中同时传递文件资源和 json 正文
Posted
技术标签:
【中文标题】在单个 HTTP POST 请求中同时传递文件资源和 json 正文【英文标题】:Passing both a file resource and a json body in a single HTTP POST request 【发布时间】: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
时它是否会覆盖类型。
【参考方案1】:
根据文件的大小,您可以对数据进行 base64 编码并将其包含在 JSON 有效负载中。
否则,您将需要使用Content-Type: multipart/form-data
。
【讨论】:
以上是关于在单个 HTTP POST 请求中同时传递文件资源和 json 正文的主要内容,如果未能解决你的问题,请参考以下文章