在我的web应用程序上,我有一个链接,用户可以单击该链接并下载包含一些信息的CSV文件。
当用户单击下载链接时,应用程序将从DynamoDB检索记录,并以异步方式将结果作为文件保存到S3,因为完成检索和保存可能需要大约15秒。
这意味着当用户单击下载链接时,文件不会立即在S3上提供给用户。
在这种情况下,如何在文件成功保存到S3并准备下载后,立即将文件推送到前台用户?
发布于 2020-04-07 11:58:27
对于长时间运行的作业,典型的策略是跟踪数据库中的某种作业ID,并在完成时更新数据库。例如,您可能有一个如下所示的API:
POST /jobs
{ ... job parameters ... }
作为回应:
{
"id": "c7758160-12c2-448a-b982-1f613e4a9593"
"status": "processing"
}
然后,您可以轮询结果:
GET /jobs/c7758160-12c2-448a-b982-1f613e4a9593
如果作业status
是done
或其他什么,那么您可以点击相应的S3 status
。(您的API服务器可能会返回一个签名的URL。)
您还可以使用服务器发送的事件进行更新,而不是轮询。
作为替代方法,对于运行时间较短的作业,您可以接受S3请求,开始作业处理,并且只有在作业处理完成后才发出HTTP302/307重定向到API。不过,我通常不会做超过几秒钟的事情。
https://stackoverflow.com/questions/61071667
复制相似问题