Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.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

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
Amazon web services 设置S3在浏览器中加载内容的正确方法是什么?_Amazon Web Services_Amazon S3_Aws Lambda - Fatal编程技术网

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

Amazon web services 设置S3在浏览器中加载内容的正确方法是什么?,amazon-web-services,amazon-s3,aws-lambda,Amazon Web Services,Amazon S3,Aws Lambda,我想执行以下操作:浏览器中的用户键入一些文本,然后按下“保存”按钮,文本应保存在S3存储桶根目录下文件夹(例如:/username\u text)中的文件(例如:content.txt)中 此外,我希望用户能够在访问同一页面时,从S3加载内容并继续处理该文件。然后,如果他/她完成了,再次将文件保存到S3 也许有必要提及,但我计划在我的后端使用NodeJS 我现在的问题是:设置存储和检索的最佳方法是什么?我是否创建了一个API网关+Lambda函数来获取和发布文件?或者我是否使用节点中的aws s

我想执行以下操作:浏览器中的用户键入一些文本,然后按下“保存”按钮,文本应保存在S3存储桶根目录下文件夹(例如:/username\u text)中的文件(例如:content.txt)中

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

也许有必要提及,但我计划在我的后端使用NodeJS

我现在的问题是:设置存储和检索的最佳方法是什么?我是否创建了一个API网关+Lambda函数来获取和发布文件?或者我是否使用节点中的aws sdk直接从S3推拉文件?还是有更好的方法

我看了以下两个指南:


  • 欢迎来到StackOverflow

    我觉得你太担心那些不那么重要的事情了。S3只是一个存储系统。您可以决定将这些文件的内容存储在DynamoDB、RDS等上。如果将其内容存储在这些真实的数据库上,您会怎么做?您会获取数据并将其显示给用户,是吗

    这就是S3所需要做的!S3在您的场景中是一个明智的选择,因为您的“文件”可能会变得非常大,S3是存储文件的好地方。然而,很明显,您实际上并没有存储文件(比如.pdf、.mp4、.mov等),您实际上只是存储人类可读的文本

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

    获取文件内容

  • 用户登录
  • 您可以根据某个令牌获取用户的个人信息。您可以将所有元数据存储在DynamoDB中,在给定用户id的情况下,从该用户获取所有“文件”。这些“文件”(仅元数据)将是S3上实际文件的bucket和key
  • 使用S3中的
    getObject
    API根据查询获取文件,并以RESTful方式向用户显示文件正文。您的回答应该如下所示:

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

  • 保存文件内容

  • 用户登录
  • 用户在表单中写入任何内容并提交。在Lambda函数中,获取此表单的内容并对其进行处理。此请求应如下所示:

    { “文件id”:“某些id”, “用户id”:“某些id”, “内容”:“一些内容” }

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

  • 这样,您就不必担心上传/下载文件,因为这些都是CPU密集型任务,因此您可以保持低成本,同时在函数中使用很少的RAM(128MB应该足够了),毕竟,您现在只提供文本。这不仅会简化您的设计方式,而且会使API网关和代码中的事情变得更简单,因为您不必处理二进制类型。在提供某些内容时,您最多可以将缓冲区从S3转换为字符串,但这应该是完全正确的

    编辑


    关于您是否应该从浏览器上传的问题,我建议您仔细研究一下,我将介绍通过API网关和从浏览器上传的优缺点。

    欢迎使用StackOverflow

    我觉得你太担心那些不那么重要的事情了。S3只是一个存储系统。您可以决定将这些文件的内容存储在DynamoDB、RDS等上。如果将其内容存储在这些真实的数据库上,您会怎么做?您会获取数据并将其显示给用户,是吗

    这就是S3所需要做的!S3在您的场景中是一个明智的选择,因为您的“文件”可能会变得非常大,S3是存储文件的好地方。然而,很明显,您实际上并没有存储文件(比如.pdf、.mp4、.mov等),您实际上只是存储人类可读的文本

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

    获取文件内容

  • 用户登录
  • 您可以根据某个令牌获取用户的个人信息。您可以将所有元数据存储在DynamoDB中,在给定用户id的情况下,从该用户获取所有“文件”。这些“文件”(仅元数据)将是S3上实际文件的bucket和key
  • 使用S3中的
    getObject
    API根据查询获取文件,并以RESTful方式向用户显示文件正文。您的回答应该如下所示:

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

  • 保存文件内容

  • 用户登录
  • 用户在表单中写入任何内容并提交。在Lambda函数中,获取此表单的内容并对其进行处理。此请求应如下所示:

    { “文件id”:“某些id”, “用户id”:“某些id”, “内容”:“一些内容” }

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

  • 这样,您就不必担心上传/下载文件,因为这些都是CPU密集型任务,所以您可以保持低成本,同时在功能中使用很少的RAM(128MB应该比