Retrofit + AWS S3-上载URL的预签名URL,我应该对PUT请求使用循环吗?

时间:2020-01-11 03:58:42

标签: android amazon-web-services amazon-s3 aws-lambda retrofit2

我有一个AWS Lambda函数,用户可以对其进行GET request并返回预签名的URL。然后,用户通过向该URL发出PUT请求来上传图像。由于AWS S3 PUT requests将每个URL的对象上传限制为一个,所以

如何发送多张图像?我是否应该在当前图像数量上使用循环,例如:

说用户要上传5张图片。

for(...5 images...){
   Make GET request to generate URL
   In the callback method, 
   Make a PUT request to the generated URL to upload image
} 

我不确定是否应该以这种方式使用该服务。而且,这还会引起另一个问题,例如,如果我希望将所有图像上传并保存到我的数据库中,或者不保存任何图像,该怎么办。因为在PUT request's后处理Lambda函数中,我想将该S3图像URL保存到我的数据库中,所以如果网络出现故障,如何确保所有图像都被上传,而不仅仅是3/5?

1 个答案:

答案 0 :(得分:2)

您是对的。预先生成的url专门用于上传单个文件。

如果要在所有文件上传或不上传的情况下实现这种原子行为,则需要自己实现这种逻辑。

例如,将所有文件上传到其他S3位置。然后,一旦上传了所有文件,您应该具有将文件移动到实际位置的服务或功能。