我一直在用这个curl命令发布一个文件:
curl -i -F file=@./File.xlsm -F name=file -X POST http://example.com/new_file/
现在我想随文件一起发送一些有关文件(作为 JSON)的信息。
curl -i -H "Content-Type: application/json" -d '{"metadata": {"comment": "Submitting a new data set.", "current": false }, "sheet": 1, "row": 7 }' -F file=@./File.xlsm -F name=file http://example.com/new_file/
Curl对以这种完全不正确的方式使用非常不满,在这种情况下,它说"你只能选择一个HTTP请求!好吧,很公平,那么如何将文件附件和这些 POST 变量放入单个 curl HTTP 请求中呢?
我已经成功地开发了类似的端点,这些端点接受多个文件及其 JSON 格式的元数据。
curl -i -X POST -H "Content-Type: multipart/mixed" -F "blob=@/Users/username/Documents/bio.jpg" -F "metadata={"edipi":123456789,"firstName":"John","lastName":"Smith","email":"john.smith@gmail.com"};type=application/json" http://localhost:8080/api/v1/user/
请注意,在元数据请求部分的末尾添加了;type=application/json
。上传多个不同类型的文件时,可以在 -F 值的末尾定义 mime 类型。
我已经使用 @RequestPart 确认这适用于 Spring MVC 4.3.7。该实例中的关键是不在@RequestMapping注释上提供消耗值。
您可以添加另一个表单字段:
curl -X POST http://someurl/someresource -F upload=@/path/to/some/file -F data="{"test":"test"}"
注意:由于内容类型的原因,这并不真正等同于将 json 发送到 Web 服务。
这对我有用:
curl -v -H "Content-Type:multipart/form-data" -F "meta-data=@C:Userssaurabh.sharmaDesktoptest.json;type=application/json" -F "file-data=@C:Userssaurabh.sharmaPicturesSaved Pictureswindows_70-wallpaper.jpg" http://localhost:7002/test/upload
test.json 有我想发送的 json 数据。
从@nbrooks注释中,添加一个额外的标头 HTTP 标头工作正常,如下所示,通过在 curl 命令中使用多个-H or --header
标志:
curl -H "comment: Submitting a new data set." -H "current: false" -H "sheet: 1" -H "row: 7" -F file=@./File.xlsm -F name=file http://example.com/new_file/
comment
和current
可以合并到"元数据"中request.headers
烧瓶网络服务器上的处理部分。