web-services - 如何使用 REST Web 服务上传包含元数据的文件?

标签 web-services json rest file-upload

我有一个 REST Web 服务,它当前公开了这个 URL:

http://server/data/media

用户可以POST以下JSON:

{
    "Name": "Test",
    "Latitude": 12.59817,
    "Longitude": 52.12873
}

为了创建一个新的媒体元数据。

现在我需要能够在上传媒体元数据的同时上传文件。解决这个问题的最佳方法是什么?我可以引入一个名为 file 的新属性并对文件进行 base64 编码,但我想知道是否有更好的方法。

还有使用 multipart/form-data 就像 HTML 表单发送的内容一样,但我使用的是 REST Web 服务,如果可能的话,我想坚持使用 JSON。

最佳答案

我同意 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 可以指向具有更多空间/容量的其他服务器。或者,如果带宽是一个问题,您可以实现某种循环方法。

关于web-services - 如何使用 REST Web 服务上传包含元数据的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3938569/

相关文章:

android - 从MySql数据库获取cUrl

python - 在 Django Rest Framework 中保持登录

python - Flask路由查询参数

javascript - 使用 jquery flot 绘制 json 数组

json - 如何列出 Gorilla Mux 中的所有变量?

Python 网络服务

java - Soap 处理程序中入站和出站 xml 之间的关联

java - Android中如何根据动态SerializedName用gson解析json对象

javascript - 移动网络服务无法使用

java - 为 iOS、Android 和桌面开发应用程序