我正在开发的一个网站拥有一个图像库,我们鼓励用户从中下载文件。
我们正在使用Delicious Brains的AWS插件将我们的静态内容托管在主站点以外的单独服务器上(url路由到static.domain.com而不是www.domain.com),但我们如何才能在我们的站点上添加下载链接,从而自动触发浏览器直接从Amazon实例下载文件?
我希望使用HTML5下载属性可以达到以下目的:
<a download href="http://static.domain.com/wp-content/uploads/image.jpg">Download Image</a>
但不幸的是,IE、Edge或Safari不支持这一点。为了让下载请求只由S3而不是主web服务器处理,正确的PHP方法是什么?
最合适的回答,由SO网友:Kevin Fodness 整理而成
您必须选择是直接从S3提供文件,还是弹出一个下载框供用户下载。
如果您直接从S3提供文件,那么用户的浏览器将决定如何处理它。对于图像,最有可能在浏览器中显示图像。
如果通过服务器路由请求,则可以控制用户接收文件的方式。您可以向响应中添加标题,告诉浏览器应该提示用户保存文件,而不是试图显示文件。
请参阅PHP文档中关于如何强制文件下载框的指南:http://php.net/manual/en/function.readfile.php
我建议不要使用这种方法,不要让文件直接链接到S3,这样可以让用户控制他们对文件的操作。特别是在移动时代,如果用户使用的是没有文件系统概念的iPhone或iPad,“下载”功能就没有在同一窗口中打开图像并允许用户使用本机控件将图像保存到照片、通过电子邮件发送图像、AirDrop或其他方式那么有意义。