如何在单个curl POST中发送文件和数据?
尝试了类似一起使用-F和-d选项的方法,但没有帮助:
curl -X POST -F 'file=/Users/<uid>/model.tar.gz' http://<uri>/api/v1/modelfiles/ -H 'AUTH-TOKEN:<token>' -d '{"model_id": "<uuid>",
"filename": "model.tar.gz",
"framework": "Tensorflow",
"framework_version": "1.8.0",
"meta": {}
}'
答案 0 :(得分:0)
简短版本:您不能。这不是HTTP的工作方式。您可以在一个POST请求中发送一个Blob数据,但您尝试发送两个(JSON字符串和文件)。
更长的版本:这取决于您的服务期望。文件中的数据是否应该是JSON的一部分?然后,您需要预处理JSON并将文件数据放入其中,以便发送-d '{"file": "<your file data here>", "filename": ... }'
文件是否应该是名为“ file”的表单字段,并且JSON数据是名为“ json”的字段的内容?然后,您可以同时使用-F file=@/users/uid/model.tar.gz -F 'json={...}'
进行发送。 Curl会小心地将它们内联到Blob中,就像您使用带有两个字段的浏览器表单一样。
(请注意文件名前面的@
符号;您需要这样做,否则将发送字符串“ /users/uid/model.tar.gz”)
还有其他吗?也许您应该先发送数据,然后再发送JSON?