我要执行以下操作:浏览器中的用户键入一些文本,然后按“保存”按钮后,应将文本保存在文件夹(例如,文件夹)中的文件(例如:content.txt)中。 :/ username_text)。
此外,我希望用户能够在他访问同一页面时从S3加载内容并继续处理文件。然后,如果他/她完成了,则再次将文件保存到S3。
也许很重要,但是我打算在后端使用NodeJS ...
我现在的问题是:设置此存储和检索内容的最佳方法是什么?是否通过该接口创建API网关+ Lambda函数以获取和发布文件?还是我例如使用Node中的aws-sdk直接从S3推入和拉出文件?还是有更好的方法来做到这一点?
我查看了以下两个指南:
答案 0 :(得分:0)
欢迎使用StackOverflow!
我认为您太担心不太重要的东西了。 S3只是存储系统。您可能已经决定将这些文件的内容存储在DynamoDB,RDS等上。如果将其内容存储在这些实际数据库中,该怎么办?您将获取数据并将其显示给用户,不是吗?
这是您需要使用S3进行的操作! S3是您方案中的明智选择,因为“文件”可能会变得很大,并且S3是存储文件的好地方。但是,显然,您实际上并没有存储文件(例如.pdf,.mp4,.mov等),实际上只存储了人类可读的文本。
因此,这是解决问题的一种方法:
获取文件内容
您可以使用S3中的getObject
API根据查询来获取文件,并以RESTful方式向用户显示文件的主体。您的回复应如下所示:
{ “ content”:“一些内容” }
保存文件内容
用户以表格形式编写任何内容并提交。在Lambda函数中,您可以获取此表单的内容并进行处理。该请求应如下所示:
{ “ file_id”:“ some-id”, “ user_id”:“ some-id”, “ content”:“一些内容” }
如果存在file_id,请更新S3中的内容。否则,请在S3中上载新文件,然后在DynamoDB中创建一个新条目。然后,您当然必须处理提交更改的用户是否实际拥有该文件,但是如果您使用的是UUID,那应该不会有太大问题,但是仍然值得检查,以防ID泄漏
这样,您就不必担心文件的上载/下载,因为它们是占用大量CPU的任务,因此您可以降低成本,并在功能中使用很少的RAM(128MB应该绰绰有余) ,毕竟,您现在只提供文本。这不仅将简化您的设计方式,而且还将使API Gateway和代码中的事情变得更加简单,因为您不必处理二进制类型。您要做的最大工作是在提供某些内容时将缓冲区从S3转换为String,但这应该是完全可以的。
编辑
关于您是否应该从浏览器上传的问题,建议您查看一下answer,在这里我将介绍通过API网关与通过浏览器进行上传/接收的优缺点。 / p>