我有一个 REST Web 服务,它当前公开了这个 URL:
http://服务器/数据/媒体
用户可以POST在其中使用以下 JSON:
POST
{ "Name": "Test", "Latitude": 12.59817, "Longitude": 52.12873 }
为了创建一个新的媒体元数据。
现在我需要能够在上传媒体元数据的同时上传文件。解决这个问题的最佳方法是什么?我可以引入一个名为filebase64 的新属性并对文件进行编码,但我想知道是否有更好的方法。
file
也有使用multipart/form-data类似于 HTML 表单发送的内容,但我使用的是 REST Web 服务,如果可能的话,我想坚持使用 JSON。
multipart/form-data
我同意 Greg 的观点,即两阶段方法是一个合理的解决方案,但是我会反过来做。我会做:
POST http://server/data/media body: { "Name": "Test", "Latitude": 12.59817, "Longitude": 52.12873 }
创建元数据条目并返回如下响应:
201 Created Location: http://server/data/media/21323 { "Name": "Test", "Latitude": 12.59817, "Longitude": 52.12873, "ContentUrl": "http://server/data/media/21323/content" }
然后,客户端可以使用此 ContentUrl 并对文件数据执行 PUT。
这种方法的好处是,当您的服务器开始因大量数据而不堪重负时,您返回的 url 可以指向具有更多空间/容量的其他服务器。或者,如果带宽是一个问题,您可以实施某种循环方法。