我正在现有应用程序之上创建一个RESTAPI。其中一个特性接受JSON数据以及用户上传的文件。
我不确定如何将同一请求中的文件和JSON数据发送到RESTAPI?
我让JSON部件工作,并使用curl测试:
curl -XPOST http://localhost:8080/myapp/foo -d '{"mydata": {
"name":"somename",
"gender":"male"
}}'
//I would like to send an image (say, profile image) with the above request as well.
我使用的是Grails应用程序,所以我在控制器中得到这些数据,就像这样:new Foo(params.mydata)。
问题
是否可以向API发送相同请求中的JSON数据和文件?如果是这样,如何使用curl或rest控制台(chrome扩展)
这个请求的contentType是什么?
如果这意味着我可以在同一个请求中发送文件和其他数据(字符串),那么我可以使用其他格式发送数据。我没有绑在JSON上
更新
我发现了另一个同样的问题。从这个问题的答案来看,似乎只有三个选择,没有一个选择可以在同一个请求中同时发送JSON数据和文件。这是非常令人沮丧的…我将保持这个问题的开放,看看是否有人有其他的想法。
我认为这样做的"正确"方法是使用多部分消息。这样,您就可以使用相应的正确mime类型发布JSON和图像。维基百科关于多部分mime类型的文章提供了一个例子,说明了这一点。看起来ApacheHTTPCommons和Jersey都支持这种方式,显然curl也支持这种方式!
我很困惑。你的回答令人鼓舞,但我发现了另一个与我的问题相同的问题,似乎只有三种选择。没有人说JSON数据和文件可以在同一个请求中发送:/questions/4083702/…
我正要建议在您发布的链接中选项3的数量-发送元数据,服务器用一个URI响应,将图像发布到,将图像发送到该URI。然而,multipart/mixed mime类型允许您在同一条消息中有多个内容类型,由您定义的任何"边界"分隔。这将使整体内容类型为multipart/mixed,接下来的两个块是application/json,然后是image/jpeg。
好的,让我用两个块来尝试application/json和image/jpeg的multipart/mixed内容类型。等等,第二个街区image/jpeg怎么办?文件会上传吗?只是想知道如何使用REST控制台chrome插件将此请求作为测试发送:)