0

在我的应用程序中,我使用 Zend_Service_Amazon_S3 来存储一些大型媒体文件。当用户下载文件时,应用程序首先将文件复制到本地服务器,然后从那里将文件连同一些用于强制下载文件的标头一起发送到浏览器。

有没有办法让亚马逊直接将文件流式传输到浏览器,而无需将整个文件复制到本地服务器?理想情况下,应用程序仍然可以选择强制下载文件的名称(在许多情况下与亚马逊上的文件不同)。

4

1 回答 1

2

一种解决方案是使用反向代理服务器,该服务器将请求代理到 Amazon S3,但也重写响应标头以更改文件名并强制下载。

这将消除制作该文件的本地副本的需要,但实际的数据传输仍将通过您的服务器。

我建议为此研究 Nginx,更具体地说,研究proxy_passadd_header配置选项。


另一种解决方案是在 S3 中制作文件的临时副本(使用 PUT 对象复制调用,因此您无需将其传输到服务器),然后将此对象上的 Content-Type 和 Content-Disposition 标头设置为强制下载。

然后,您可以将这些文件直接从 S3 流式传输到客户端的浏览器,但您需要定期在 S3 上清理它们,因为下载完成后它们不会被自动删除。

于 2011-11-09T06:03:25.847 回答