我正在设计一个REST API来上传一个较大的(100MB)文件和一些信息。因此,考虑json编码是很自然的。
这样的事情:
{
file: content of the file or URL?
name: string
description: string
}
json很容易使用名称和说明,但我不确定如何将文件内容添加到其中。
我也在想我应该使用http PUT方法。这是对的吗?
顺便说一句,如果重要的话,golang用于实现此API。
答案 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"的支持。