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