设置S3以在浏览器中加载内容的正确方法是什么?

时间:2019-03-24 19:47:46

标签: amazon-web-services amazon-s3 aws-lambda

我要执行以下操作:浏览器中的用户键入一些文本,然后按“保存”按钮后,应将文本保存在文件夹(例如,文件夹)中的文件(例如:content.txt)中。 :/ username_text)。

此外,我希望用户能够在他访问同一页面时从S3加载内容并继续处理文件。然后,如果他/她完成了,则再次将文件保存到S3。

也许很重要,但是我打算在后端使用NodeJS ...

我现在的问题是:设置此存储和检索内容的最佳方法是什么?是否通过该接口创建API网关+ Lambda函数以获取和发布文件?还是我例如使用Node中的aws-sdk直接从S3推入和拉出文件?还是有更好的方法来做到这一点?

我查看了以下两个指南:

  1. Using AWS S3 Buckets in a NodeJS App – Codebase – Medium

  2. Image Upload and Retrieval from S3 Using AWS API Gateway and Lambda

1 个答案:

答案 0 :(得分:0)

欢迎使用StackOverflow!

我认为您太担心不太重要的东西了。 S3只是存储系统。您可能已经决定将这些文件的内容存储在DynamoDB,RDS等上。如果将其内容存储在这些实际数据库中,该怎么办?您将获取数据并将其显示给用户,不是吗?

这是您需要使用S3进行的操作! S3是您方案中的明智选择,因为“文件”可能会变得很大,并且S3是存储文件的好地方。但是,显然,您实际上并没有存储文件(例如.pdf,.mp4,.mov等),实际上只存储了人类可读的文本。

因此,这是解决问题的一种方法:

获取文件内容

  1. 用户登录
  2. 您基于某些令牌获取用户的个人信息。您可以将所有元数据存储在DynamoDB中,在给定user_id的情况下,从该用户获取所有“文件”。这些“文件”(仅元数据)将成为S3上实际文件的存储桶和密钥。
  3. 您可以使用S3中的getObject API根据查询来获取文件,并以RESTful方式向用户显示文件的主体。您的回复应如下所示:

    {     “ content”:“一些内容” }

保存文件内容

  1. 用户登录
  2. 用户以表格形式编写任何内容并提交。在Lambda函数中,您可以获取此表单的内容并进行处理。该请求应如下所示:

    {     “ file_id”:“ some-id”,     “ user_id”:“ some-id”,     “ content”:“一些内容” }

  3. 如果存在file_id,请更新S3中的内容。否则,请在S3中上载新文件,然后在DynamoDB中创建一个新条目。然后,您当然必须处理提交更改的用户是否实际拥有该文件,但是如果您使用的是UUID,那应该不会有太大问题,但是仍然值得检查,以防ID泄漏

这样,您就不必担心文件的上载/下载,因为它们是占用大量CPU的任务,因此您可以降低成本,并在功能中使用很少的RAM(128MB应该绰绰有余) ,毕竟,您现在只提供文本。这不仅将简化您的设计方式,而且还将使API Gateway和代码中的事情变得更加简单,因为您不必处理二进制类型。您要做的最大工作是在提供某些内容时将缓冲区从S3转换为String,但这应该是完全可以的。

编辑

关于您是否应该从浏览器上传的问题,建议您查看一下answer,在这里我将介绍通过API网关与通过浏览器进行上传/接收的优缺点。 / p>