在我的应用程序中,我使用Zend_Service_Amazon_S3存储一些大型媒体文件。当用户下载文件时,应用程序首先将文件复制到本地服务器,然后将文件与一些标题强制下载文件一起发送到浏览器。
有没有办法让Amazon直接将文件流式传输到浏览器,而无需将整个文件复制到本地服务器?理想情况下,应用程序仍然可以选择强制下载文件的名称(在许多情况下与Amazon上的文件不同)。
答案 0 :(得分:2)
一种解决方案是使用反向代理服务器代理请求到Amazon S3,但也重写响应标头以更改文件名并强制下载。
这将消除制作该文件的本地副本的需要,但实际数据传输仍将通过您的服务器。
我建议您查看Nginx,更具体地说,请查看proxy_pass和add_header配置选项。
另一种解决方案是在S3中制作文件的临时副本(使用PUT对象复制调用,因此您无需将其传输到服务器),然后设置Content-Type和Content-Disposition标头。此对象强制下载。
然后,您可以将这些文件直接从S3流式传输到客户端的浏览器,但是您需要定期在S3上清理它们,因为下载完成后它们不会自动删除。