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