json - 用于在 JSON 中上传文件的 REST API

标签 json rest http go

我正在设计一个 REST API 来上传一个较大的 (100MB) 文件和一些信息。所以很自然的想到json编码。

所以像这样:

{
   file: content of the file or URL?
   name: string
   description: string
}

名称和描述很容易用 json 做,但我不确定如何将文件内容添加到它。

另外我在想我应该使用 http PUT 方法。这是正确的吗?

顺便说一下,如果重要的话,golang 用于实现这个 API。

最佳答案

对于 JSON 编码,使用 []byte 值来保存文件内容。标准编码/json 包将 []byte 值编码为 base64 字符串。

下面是如何实现 JSON 编码的草图。声明一个表示有效载荷的类型:

type Upload struct {
    Name string
    Description string
    Content []byte
}

将文件编码为请求正文:

v := Upload{Name: fileName, Description: description, Content: content}
var buf bytes.Buffer
if err := json.NewEncoder(&buf).Encode(v); err != nil {
    // handle error
}
req, err := http.NewRequest("PUT", url, &buf)
if err != nil {
   // handle error
}
resp, err := http.DefaultClient.Do(req)

从服务器上的请求主体解码:

var v Upload
if err := json.NewDecoder(req.Body).Decode(&v); err != nil {
  // handle error
}

另一种选择是使用 mime/multipart包裹。多部分编码将比 JSON 编码更有效,因为多部分不需要文件的 base64 或其他文本编码。

关于json - 用于在 JSON 中上传文件的 REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25860391/

相关文章:

javascript - Fabric js 使用自定义属性扩展到对象,丢失默认属性

json - Jquery 移动自动完成和 Geonames

java - 如何让 Glassfish 4.1.1 和 Jersey 使用 JSON?

javascript - 使用 $resource 服务访问 REST API

android - 如何使用 URL 处理多个微调器?

javascript - 用于 URL 的 Bootstrap 表格式化程序

javascript - Shopify API : Get url that leads directly to checkout

python - 通过 Python 的单个连接进行多个请求

javascript - 从 Fetch 中捕获 200 OK 以外的响应

web-services - 按国家/地区获取利率