json - 使用 multipart/form-data 比 JSON + Base64 更好吗?

标签 json http base64 multipart form-data

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

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

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

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

我不知道如何设计这个。我是否应该只让客户端上传带有 base64 编码字段的 JSON,并获得 25% 的命中率?或者我应该在多部分/表单数据请求中将 JSON 对象表示为某种“json”变量,并将二进制文件作为另一个变量上传?

最佳答案

Should I just have the client upload JSON with the fields encoded in base64, and take the 25% hit?

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

Or should I have the JSON object being represented as some sort of "json" variable in a Multipart/form-data request, and have the binary files to be uploaded as another variable?

这应该有效。

您也可以考虑这种方法:使用 multipart 发送所有文件,然后获取一些文件标识符作为响应。将此标识符放入您的 json 中,然后随心所欲地发送。如果您有许多发送文件的场景,这种方法可能会有所帮助:您可能总是使用相同的请求将它们发送到服务器,然后获取它们的标识符;之后随心所欲地处理它们。

关于json - 使用 multipart/form-data 比 JSON + Base64 更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18240692/

相关文章:

php - 如何修复网络解决方案 ssl 代理的错误

java - new String(byte[]) 和 DatatypeConverter.printBase64Binary(byte[]) 有什么区别?

javascript - jquery 加载更多内容 onclick

json - Akka HTTP 路由和编码(marshal)处理

linux - 为什么浏览器请求文件,即使启用了 Apache mod_expires?

javascript - 使用 Selenium 截取屏幕截图元素?

javascript - 在 JavaScript 中下载 PDF Blob 时出现问题

python - 在 flask 的 jsonify() 中缩小 JSON

javascript - 使用json的图像?

javascript - 在 Angular 4 中使用发布请求时出现 400 错误