我是S3的新手。我对s3的理解是浏览器请求一个图像,然后服务器将必须连接到s3获取图像,就好像它是一个文件系统,获取流并将输出发送到浏览器。我想知道是否有一种方法可以直接给出s3桶/图像的URL,但这必须是在身份验证之后并且必须有时间限制,以便在一段时间后你应该能够再次访问图像。
与上传相同。文件名等上传细节必须转到服务器,但图像进入s3,服务器更新成功/错误。这可能吗。我打算在服务器上使用nodejs
我听说过knox但不确定它适合哪种情况。
答案 0 :(得分:1)
您对S3的理解不完整。
在下载时:让服务器从S3“检索图像(或其他文件)”或“通过HTTP”然后将其转发到客户端。这不仅是不必要的,而且可以说是浪费带宽和服务器资源,几乎肯定会增加延迟。
如果图像不需要保护,那么您只需使用指向适当的S3端点+存储桶+对象(或存储桶+端点+对象)的链接 - 该URL可以以两种不同的方式构建时间)。
存储桶是存储在Amazon S3中的对象的容器。每个对象都包含在一个桶中。例如,如果名为 photos / puppy.jpg 的对象存储在 johnsmith 存储桶中,那么它是可使用网址http://johnsmith.s3.amazonaws.com/photos/puppy.jpg
进行寻址
您也可以使用https。
另一方面,如果要防止未经授权访问该文件,可以将存储桶配置为不允许公共访问,并通过在Web服务器上生成签名URL来使用query string authentication,这些URL提供用户的具有过期临时凭证的浏览器,如下所示:
http://johnsmith.s3.amazonaws.com/photos/puppy.jpg?AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Expires=1141889120&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv4%3D
到期时间 - 您选择的值 - 此网址将不再有效。不,改变“到期”值不会使其有效。 :)
当然,下次用户访问您的网站时,您的服务器会为同一图片生成一个新的签名网址,供该浏览器在后续会话中使用。
还解释了上传过程in the documentation。在这里,两种方法都是可能的。
您的网站可以制作一个包含授权和身份验证详细信息的HTML表单,允许浏览器将文件直接发送到S3,然后S3在上传完成后将浏览器重定向回您的站点(在您指定的URL处)并指示成功或失败...或者您可以让浏览器照常将文件上传到Web服务器,然后Web服务器可以代理或以其他方式将其传输到S3。
我对knox不熟悉,但它似乎是一个提供某种或所有这些事情的方法的库。