手头的问题
- 我有一个轨道应用程序。
- 用户将上传文件。1 个文件到 3000 个文件之间的任何位置。有时它们是 zip 文件,有时它们不是。我不想通过这些文件上传来阻止服务器,所以我正在寻找解决这个问题的方法。
- 压缩文件必须解压缩。
- 然后我想检查是否:用户以前上传过相同的文件?即如果用户已经在一周前上传了相同的文件(2),那么这是一个问题:(i) 我们不允许上传该特定文件,或者我们询问用户:你确定你想要再次上传相同的文件?
- 然后我想在后端的适当模型/记录中存储文件的键/链接。
想知道处理上述问题的最佳工作流程是什么:即一个非常笼统的概述:换句话说,AWS Lambda / Google 云计算等是否可以最好地用于处理上述问题?我们将如何使用神殿宝石来最好地处理这种情况?使用 AWS Lambda 而不是使用后台作业有意义吗?
我的偏好是使用 Shrine gem 进行上传。
我的想法:
- 在客户端,用户拖放用户想要上传的文件。
- 然后通过 Shrine gem 将所有文件上传(无论是压缩文件还是其他文件)到临时存储桶位置。
- 如果上传了 zip 文件,则可能必须触发 AWS lambda 函数来解压缩文件。如果是这种情况,那么最终,这些文件的密钥必须以某种方式返回给客户端,以处理验证问题——但是 AWS lambda 函数如何能够将此请求返回给原始客户端请求是从哪里发起的?或者更确切地说,是否应该从客户端生成 AWS lambda 函数,并传入解压缩 blob 的 ID?
- 然后我们需要运行一些验证:我们要处理存在重复文件的情况。我们需要检查我们支持的 Rails 是否已经上传了这些文件。
- 处理完这些验证问题后,用户提交表单,所有密钥都存储在适当的记录中。
这些想法绝不是规定性的
我正在寻求一些非常普遍的建议,说明什么是做这一切的最佳方式。我绝不会受限于 AWS:我可以同样轻松地使用 Google 或 Azure。任何关于上述内容的指导将不胜感激。
具体问题:
- AWS lambda 函数将如何被触发?
- 如何将上传文件的密钥返回给客户端?
一般概述是什么意思?
以下是一些一般概述的示例:
(1)通过 Heroku 上的 Rails 上传和解压文件到 S3?
(2) https://www.quora.com/How-do-I-extract-large-zip-files-in-AWS-Lambda
任何指向正确方向的指针都将不胜感激。
干杯!