26

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

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

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

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

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

4

1 回答 1

11

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

由于 4/3=1.33,命中率为 33%。

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

这应该有效。

You might also consider this approach: send all files using multipart, then get some identificators of files as a response. Put this identificators in your json and send it anyway you like. This approach might be beneficial if you have many scenarios in which you send files: you might always send them to the server with the same request, then get their identificators; after that do with them what you like.

于 2013-08-23T18:39:27.077 回答