【问题标题】:Is using multipart/form-data any better then JSON + Base64?使用 multipart/form-data 比 JSON + Base64 更好吗?
【发布时间】:2013-08-16 22:25:37
【问题描述】:

我有一台服务器,我需要将文件以及一些字段从客户端上传到服务器。我目前一直在使用标准的 multipart/form-data。

然而,我发现使用 multipart/form-data 并不理想。我服务器上的对象可能嵌套了其他对象,因此表示为 JSON 对象,其中嵌入了其他 JSON 对象。

我希望客户端开始使用 JSON 表示形式发出 POST/PUT 请求,就像它在对服务器的 GET 请求中所期望的那样,以 REST-ful 方式。这样我就不必为了使用多部分/表单数据而展平可能嵌套在 JSON 对象中的几个层的字段。

问题是,JSON 不代表二进制数据。 Multipart/form-data 似乎没有办法表示嵌套在其他字段值中的字段。但它确实可以更好地处理文件上传。

我不知道如何设计这个。我是否应该让客户端上传带有以 base64 编码的字段的 JSON,并承受 25% 的打击?或者我应该在 Multipart/form-data 请求中将 JSON 对象表示为某种“json”变量,并将二进制文件作为另一个变量上传?

【问题讨论】:

    标签: json http base64 multipart form-data


    【解决方案1】:

    我是否应该让客户端上传带有编码字段的 JSON base64,并承受 25% 的打击?

    自 4/3=1.33 起,命中率为 33%。

    或者我应该将 JSON 对象表示为某种 Multipart/form-data 请求中的“json”变量,并具有二进制 文件要作为另一个变量上传?

    这应该可行。

    您也可以考虑这种方法:使用多部分发送所有文件,然后获取一些文件标识符作为响应。将此标识符放入您的 json 中,然后随意发送。如果您有许多发送文件的场景,这种方法可能会很有用:您可能总是使用相同的请求将它们发送到服务器,然后获取它们的标识符;之后随他们做你喜欢的事。

    【讨论】:

    • 最后一种提倡单独调用的方法(一种用于多部分图像,另一种用于 JSON 数据)很有趣。唯一需要担心的是 2 个 API 调用而不是 1 个。当然,这种权衡是特定于应用程序的。
    • 这个有点晚了,但是如果你走2 API调用路线,你还需要处理孤儿文件清理,其中文件调用成功但后续json调用没有发生。
    猜你喜欢
    • 2013-05-23
    • 2017-10-31
    • 2016-07-03
    • 1970-01-01
    • 2020-07-14
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多