【问题标题】:REST API for uploading file inside JSON用于在 JSON 中上传文件的 REST API
【发布时间】:2014-09-16 03:54:48
【问题描述】:

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

所以是这样的:

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

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

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

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

【问题讨论】:

    标签: json rest http go


    【解决方案1】:

    对于 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 或其他文本编码。

    【讨论】:

    • 一直在网上搜索这个简单的答案。向你致敬,先生。
    • 如果我将文件和 josn obj 一起发送,是否有关于如何在服务器端“接受”mime 类型的示例?
    【解决方案2】:

    对我来说,最明确的方法是以某种方式对文件字节进行编码。 base64 似乎是一个不错的选择,golang 已经通过“encoding/base64”内置了对它的支持。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-08
      • 2020-05-30
      • 1970-01-01
      相关资源
      最近更新 更多