Android 将多个文件(主要是图像)上载到Amazon S3 bucket的最佳实践

Android 将多个文件(主要是图像)上载到Amazon S3 bucket的最佳实践,android,reactjs,amazon-web-services,spring-boot,amazon-s3,Android,Reactjs,Amazon Web Services,Spring Boot,Amazon S3,我有多个客户端,比如web、移动web、Android和iOS应用程序。现在用户正在添加一些信息,同时还上传了一些文件 现在要上传多个文件,最好的做法是: 调用我的后端rest api在我的数据库中存储信息,并将这些文件(图像)从客户端直接异步上载到AmazonS3,然后在成功上载时调用后端rest api来存储信息,如S3中的文件位置等 对后端进行一个rest调用以存储信息,另一个多部分后端调用则调用S3以上载文件,然后将元信息存储到DB 需要考虑的要点: 如果有图像或视频,则还需要进行

我有多个客户端,比如web、移动web、Android和iOS应用程序。现在用户正在添加一些信息,同时还上传了一些文件

现在要上传多个文件,最好的做法是:

  • 调用我的后端rest api在我的数据库中存储信息,并将这些文件(图像)从客户端直接异步上载到AmazonS3,然后在成功上载时调用后端rest api来存储信息,如S3中的文件位置等
  • 对后端进行一个rest调用以存储信息,另一个多部分后端调用则调用S3以上载文件,然后将元信息存储到DB
需要考虑的要点:

  • 如果有图像或视频,则还需要进行一些压缩,而不会对质量造成太大影响。最好的方法是什么
  • 我相信从后端进行压缩将是一种更好的方法,这样压缩逻辑将只在一个地方,而不是分散在多个客户机上。但我认为,由于需要额外的休息电话,时间会略有增加
  • 但是,用户可以一次上传多个文件,所以如果我们要对后端进行rest调用,那么立即将所有这些文件发送到后端是好的还是更好的方法,将移动应用程序和移动web视为客户端,因为它们可能具有缓慢的互联网连接以及太多的网络开销
  • 当从客户端上传到S3时,我想除了存储凭证之外,还有另外一种方式,比如预签名URL或其他什么,这样就不需要在客户端存储凭证了
注意: 它不是一个微服务应用程序。后端是在Spring Boot中开发的


请帮助决定更好的方法。如果需要更多详细信息,请告诉我。

您的猜测是正确的,预先签署的URL是一个很好的解决方案。预签名的URL允许您将文件(例如图像/视频)上载到s3,而无需客户端中的AWS凭据。这个过程是生成一个预先签名的URL,该URL允许您在不需要凭据的情况下上传文件,并且有一个过期时间。 对于大文件上传,您可以在客户端压缩文件并将其作为zip上传,或者使用多部分上传,这样,如果文件太大,就不会出现超时错误。
我有一个用于预签名URL和多部分上传的nodejs代码片段,如果您想要,请告诉我。

正如您所猜测的,第二种方法更好,因为后端将负责与文件加载相关的所有操作。客户不必担心它是否存储在AWS S3、GCP云存储或任何其他文件系统中(单一责任原则)。由于它是一个大文件,理想情况下,客户端应该通过回调(或长轮询)异步触发此API。建议就压缩问题再问一个问题。正如所建议的,我要求在不同的线程中进行压缩练习。