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 AWS S3,从Angular或JS或Python上传文件_Amazon Web Services_Amazon S3_Http Post_Boto3_Pre Signed Url - Fatal编程技术网

Amazon web services AWS S3,从Angular或JS或Python上传文件

Amazon web services AWS S3,从Angular或JS或Python上传文件,amazon-web-services,amazon-s3,http-post,boto3,pre-signed-url,Amazon Web Services,Amazon S3,Http Post,Boto3,Pre Signed Url,所以我一直在尝试做一件我认为很简单的事情。为了练习AWS和前端框架,我想构建一个网页,用户可以点击上传按钮,然后将文件发送到S3存储桶,在那里我可以与lambda函数进行交互。我有HTML、JavaScript、python方面的经验,能够找到解决问题的方法,我还开发了自己的flask web服务器,因此我熟悉请求、API和REST的概念。Python是我目前最擅长的语言 然而,现在我已经开始尝试将此应用于AWS,我遇到了很多问题 有没有一种简单的方法可以将文件(图像)上传到我刚刚丢失的S3存储

所以我一直在尝试做一件我认为很简单的事情。为了练习AWS和前端框架,我想构建一个网页,用户可以点击上传按钮,然后将文件发送到S3存储桶,在那里我可以与lambda函数进行交互。我有HTML、JavaScript、python方面的经验,能够找到解决问题的方法,我还开发了自己的flask web服务器,因此我熟悉请求、API和REST的概念。Python是我目前最擅长的语言

然而,现在我已经开始尝试将此应用于AWS,我遇到了很多问题

  • 有没有一种简单的方法可以将文件(图像)上传到我刚刚丢失的S3存储桶中?这似乎应该更容易些

  • 我发现的最佳实践方法是,您应该生成一个预先签名的URL/post请求,然后从客户端使用该请求来执行上传。然而,例如,和。对我来说似乎不起作用,通常在HTTP 400中失败,请求响应错误。我已尝试从请求(响应:400)、(响应:400)和(响应:AccessDenied)发出请求。[链接中有字典、命令和请求,一旦我知道有可行的方法,我将上传代码]

  • 当我研究我发现的东西时,这似乎详细说明了AWS V4框架下post请求的字段。它们似乎与上面示例中用于生成预签名请求的方法返回的字段不同。似乎详细说明了与V4模式一致的最新工作请求,但不使用boto3或aws sdk,这似乎是错误的解决方法

  • 因此,作为一个noob,我的问题是我是否采用了正确的方法,如果是,调试策略会是什么,因为我有许多可能的失败点,从格式错误的请求到S3存储桶上的错误CORS或配置错误的IAM。我不知道从哪里开始


    如果有人告诉我我没有找错方向,我会给出一个代码示例。任何帮助都将不胜感激。

    正如您所说,您正在将用户上传的对象从您的网页(web服务器)发送到S3。您的Web服务器在哪里运行?它是否具有访问S3的正确配置。邮递员可能被拒绝访问的另一个原因是,您的bucket可能不是公共的,或者它有一些bucket策略。这里需要更多的细节。所以我想我已经完成了大部分工作,这是两种类型的安全问题。我的bucket的Block public access设置已打开。正如上面的示例代码试图为AWS auth的早期版本生成签名一样,您需要使用signature_version='s3v4',AKA,AWS4-HMAC-SHA256,这表示我现在有点担心如何配置bucket?整个阻止公众访问的事情很难理解。我确实有CORS和APM设置,基本测试似乎表明该桶实际上不是公共的,但我们还有其他安全措施吗?