用户案例:客户可以通过公共REST API将文件上传到我们的S3存储桶,然后我们可以使用下游服务处理该文件。
经过一些研究,我找到了3种方法来实现这个目标:
在第三种方法中,用户需要调用3个API。第一个API是获取S3预签名URL,该URL将允许用户上传文件到S3。在第二个API中,用户将上传文件到该S3预签名URL。上传完成后,用户将发送请求以处理文件。
经过一些研究,我找到了3种方法来实现这个目标:
- 使用OCTET-STREAM文件类型进行上传
- 使用form-data请求上传文件
- 使用预签名URL上传文件
在第三种方法中,用户需要调用3个API。第一个API是获取S3预签名URL,该URL将允许用户上传文件到S3。在第二个API中,用户将上传文件到该S3预签名URL。上传完成后,用户将发送请求以处理文件。
第3步存在安全问题吗?因为用户可以使用恶意文件滥用预签名URL。
根据行业惯例,哪种方法最好?
每种方法的详细信息:
1. 使用OCTET-STREAM文件类型上传
优点:
- 此方法适用于可以在某些应用程序中打开的文件类型,例如xlsx。
- 1个API调用。直接上传文件
缺点:
- 此选项不适用于上传多个文件。如果未来需要支持多个文件上传,则应更改为multipart/form-data(A2)。
- 无法将元数据作为正文参数发送。可以将元数据发送到标头中。
2. 使用form-data请求上传文件
用户将文件作为多部分表单附加到API请求中进行上传。
优点
- 我们可以同时发送多个文件。
- 我们可以在正文中发送额外的参数。
3. 使用预签名URL上传文件
缺点
- 客户必须调用3个API才能上传文件。(2个API调用以上传,然后再调用1个API以检查处理文件)