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

时间:2014-09-16 03:54:48

标签: json rest http go

我正在设计一个REST API来上传一个较大的(100MB)文件和一些信息。因此,考虑json编码是很自然的。

这样的事情:

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

json很容易使用名称和说明,但我不确定如何将文件内容添加到其中。

我也在想我应该使用http PUT方法。这是对的吗?

顺便说一句,如果重要的话,golang用于实现此API。

2 个答案:

答案 0 :(得分:2)

对于JSON编码,请使用[]byte值来保存文件内容。标准encoding / 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或文件的其他文本编码。

答案 1 :(得分:0)

对我而言,最明确的方法是以某种方式对文件字节进行编码。 base64似乎是一个不错的选择,golang内置了对#34; encoding / base64"的支持。