我正在开发一个 json REST Web 服务,该服务将从使用主干网构建的单个网页应用程序中使用。
此 API 将允许消费者上传与某些实体相关的文件,例如与项目相关的 pdf 报告
谷歌搜索并在堆栈溢出方面进行了一些研究,我提出了这些可能的方法:
第一种方法: base64 编码数据字段
POST: /api/projects/234/reports
{
author: 'xxxx',
abstract: 'xxxx',
filename: 'xxxx',
filesize: 222,
content: '<base64 encoded binary data>'
}
第二种方法:多部分表单发布:
POST: /api/projects/234/reports
{
author: 'xxxx',
abstract: 'xxxx',
}
作为回应,我将获得一个报告 ID,然后我将发布另一个帖子
POST: /api/projects/234/reports/1/content
enctype=multipart/form-data
然后只发送二进制数据
(看看这个:https ://stackoverflow.com/a/3938816/47633 )
第三种方法:将二进制数据发布到单独的资源并保存 href
首先我在客户端生成一个随机密钥并在那里发布二进制内容
POST: /api/files/E4304205-29B7-48EE-A359-74250E19EFC4
enctype=multipart/form-data
接着
POST: /api/projects/234/reports
{
author: 'xxxx',
abstract: 'xxxx',
filename: 'xxxx',
filesize: 222,
href: '/api/files/E4304205-29B7-48EE-A359-74250E19EFC4'
}
(见:https ://stackoverflow.com/a/4032079/47633 )
我只是想知道是否有任何其他方法可以使用,每种方法的优缺点,以及是否有任何既定的方法来处理这种要求
我看到第一种方法的最大缺点是我必须在客户端上完全加载和 base64 编码文件
一些有用的资源: