Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何上传文件和处理处理和验证-一个非常全面的概述? 眼前的问题 我有一个rails应用程序 用户将上传文件。1个文件到3000个文件之间的任意位置。有时是zip文件,有时不是。我不想因为上传这些文件而耽误服务器,所以我正在寻找解决这个问题的方法 压缩后的文件必须解压缩 然后我想检查:用户以前是否上传过相同的文件?i、 e.如果用户在一周前已经上传了相同的文件(2),那么这是一个问题:(i)要么我们不允许上传特定的文件,要么我们问用户:您确定要再次上传相同的文件吗 然后,我想将文件的键/链接存储在后端相应的模型/记录中_Ruby On Rails_Amazon S3_Aws Lambda_Cloud_Shrine - Fatal编程技术网

Ruby on rails 如何上传文件和处理处理和验证-一个非常全面的概述? 眼前的问题 我有一个rails应用程序 用户将上传文件。1个文件到3000个文件之间的任意位置。有时是zip文件,有时不是。我不想因为上传这些文件而耽误服务器,所以我正在寻找解决这个问题的方法 压缩后的文件必须解压缩 然后我想检查:用户以前是否上传过相同的文件?i、 e.如果用户在一周前已经上传了相同的文件(2),那么这是一个问题:(i)要么我们不允许上传特定的文件,要么我们问用户:您确定要再次上传相同的文件吗 然后,我想将文件的键/链接存储在后端相应的模型/记录中

Ruby on rails 如何上传文件和处理处理和验证-一个非常全面的概述? 眼前的问题 我有一个rails应用程序 用户将上传文件。1个文件到3000个文件之间的任意位置。有时是zip文件,有时不是。我不想因为上传这些文件而耽误服务器,所以我正在寻找解决这个问题的方法 压缩后的文件必须解压缩 然后我想检查:用户以前是否上传过相同的文件?i、 e.如果用户在一周前已经上传了相同的文件(2),那么这是一个问题:(i)要么我们不允许上传特定的文件,要么我们问用户:您确定要再次上传相同的文件吗 然后,我想将文件的键/链接存储在后端相应的模型/记录中,ruby-on-rails,amazon-s3,aws-lambda,cloud,shrine,Ruby On Rails,Amazon S3,Aws Lambda,Cloud,Shrine,我想知道处理上述问题的最佳工作流程是什么:即一个非常全面的概述:换句话说,AWS Lambda/Google云计算等是否可以最好地用于处理上述问题?我们将如何使用神殿宝石来最好地处理这种情况?使用AWS Lambda而不是使用后台作业有意义吗 我的偏好是使用神殿宝石上传 我的想法是: 在客户端,用户拖放用户需要的文件 想要上传 然后,所有文件都会通过神龛gem上传到临时存储桶位置(无论是压缩还是其他) 如果上载了zip文件,则可能必须触发AWS lambda函数来解压缩文件。如果是这样的话,那么

我想知道处理上述问题的最佳工作流程是什么:即一个非常全面的概述:换句话说,AWS Lambda/Google云计算等是否可以最好地用于处理上述问题?我们将如何使用神殿宝石来最好地处理这种情况?使用AWS Lambda而不是使用后台作业有意义吗

我的偏好是使用神殿宝石上传

我的想法是:
  • 在客户端,用户拖放用户需要的文件 想要上传
  • 然后,所有文件都会通过神龛gem上传到临时存储桶位置(无论是压缩还是其他)
  • 如果上载了zip文件,则可能必须触发AWS lambda函数来解压缩文件。如果是这样的话,那么在一天结束时,这些文件的密钥必须以某种方式返回给客户端,以处理验证问题——但是AWS lambda函数如何才能将该请求返回到发起请求的原始客户端?或者更确切地说,是否应该从客户端生成AWS lambda函数,并传递解压blob的ID
  • 然后我们需要运行一些验证:我们希望处理存在重复文件的情况。我们需要检查一下rails是否已经上传了这些文件
  • 处理完这些验证问题后,用户提交表单,所有密钥都存储在相应的记录中
  • 这些想法绝不是指令性的 我正在寻求一些非常普遍的建议,关于做这一切的最佳方法是什么。我决不受AWS的限制:我可以轻松地使用Google或Azure。如能提供上述任何指导,将不胜感激

    具体问题:
  • AWS lambda函数将如何触发
  • 如何将上传文件的密钥返回给客户端
  • 我所说的总体概述是什么意思? 以下是一些一般概述的示例:

    (一)

    (二)

    任何指向正确方向的指示都将不胜感激


    干杯

    如果您愿意稍微改变一下流程,这并不是一个很难解决的问题

    在客户端,用户拖放用户想要上传的文件

    当用户请求开始上载操作时,可以向API网关端点发出HTTP GET请求,并使用Lambda进行支持。Lambda可以查询客户端上载的以前的文件,并发回一个结果集,显示哪些文件已经存在。然后过滤掉这些内容,只将认为是新的内容从客户端发送到服务器。这将节省用户等待上传的时间,并节省您在S3/Lambda端的时间,而不必存储或处理副本。不过,这并不能替代服务器端验证,您仍然需要这样做。对于合法客户端,这将为您和他们节省大量带宽和存储空间

    然后,所有文件都会通过神龛gem上传到临时存储桶位置(无论是压缩还是其他)

    这很有效。当他们进入临时存储桶时,使用a来处理文件、解压缩文件、将所需的元数据推入DynamoDb并从临时存储桶中删除文件。在临时存储桶中,我会将文件放入一个文件夹中,该文件夹对于每个请求和用户都是唯一的。我会使用用户/客户端Id和某种UUID,并将其作为您的文件夹名称。例如
    Johnathon+3b5339b8-c8db-4d5c-b678-406fcf073f4f
    ,或者将此值编码为Base64字符串,并将其作为文件夹名称。将其存储在DynamoDb中,并将每个文件上载到永久存储桶中,哈希键为userid/clientid,排序键为完整文件夹路径+文件名,额外属性为
    IsProcessed
    。正在处理文件并将其移动到永久S3存储桶的Lambda将更新
    IsProcessed
    属性。如果有错误,可以将错误放在该字段中。如果它成功了,那么你把它放在这个字段中

    这些文件的密钥必须以某种方式返回给客户端,以处理验证问题——但是,AWS lambda函数如何才能将该请求返回到发起请求的原始客户端?或者更确切地说,是否应该从客户端生成AWS lambda函数,并传递解压blob的ID

    将文件推送到临时S3存储桶的原始API请求将能够将文件夹名
    johnathon+3b5339b8-c8db-4d5c-b678-406fcf073f4f
    返回到客户端。假设你发了一篇HTTP帖子到
    /jobs
    。您将返回创建的
    201
    ,HTTP头为
    Location/jobs/johnathon+3b5339b8-c8db-4d5c-b678-406fcf07f4f
    。然后,您的客户可以开始轮询进程状态的
    /jobs/johnathon+3b5339b8-c8db-4d5c-b678-406fcf073f4f

    您对
    /jobs/johnathon+3b5339b8-c8db-4d5c-b678-406fcf073f4f
    的回复可以返回DynamoDB reco