HTTP "Content-Disposition: attachment"和在iOS Web浏览器上下载文件

58

我希望我的用户可以下载PDF文件,并让浏览器将其视为文件,而不仅仅是显示它(即它具有文件名,用户可以选择保存等)。以下标头似乎在除iOS之外的所有地方都很有效:

Content-Disposition: attachment; filename=file.pdf
iOS会忽略这个响应头并显示图像或文档。你可能认为这没有什么大不了,但我正在隐藏的IFRAME中执行此操作作为我的下载页面的一部分,所以该文档甚至从未被看到,而且看起来好像下载失败了。
最佳处理方式是什么,可以跨浏览器兼容?iOS是否会忽略此标题?我找不到任何规范或提及此事的地方。
我需要在请求标头中检查iOS并以不同的方式提供响应吗?我希望避免这种情况。谢谢。
P.S.欢迎提供有关在iOS Web浏览器中下载文件等其他有用提示。
澄清:这是针对移动Safari浏览器浏览的常规网站,而不是本地应用程序。

有运气了吗?我遇到了类似的问题。 - George Mauer
1
就我目前的解决方案而言,我是这样做的:在桌面上,我使用target=iframeId技巧将表单/锚点提交到隐藏的iframe中,在iPad/iPod上(通过userAgent嗅探确定),我将目标设置为_blank以强制在新标签页中打开。 - George Mauer
@GeorgeMauer,我想试一下这个,但家里没有iPhone或iPad,也不能在工作中证明做这些事情的合理性。你知道有哪个浏览器可以在Windows或Linux PC上免费使用,并展现与iOS浏览器相同的行为吗? - Mark Amery
@MarkAmery browserstack.com?30分钟的演示虚拟机时间可能足够了 - 他们通常非常慷慨地计算“使用时间”。 - George Mauer
仅仅启动一个网络API的HTTP GET请求或使用套接字会有所作为吗? - Stephen J
显示剩余4条评论
2个回答

22

移动版Safari浏览器不支持文件下载。

如果Safari能够显示该文件,它将会被展示。如果您安装了其他可以打开该文件的应用程序,Safari会自动检测到。


请参见 https://apple.stackexchange.com/questions/25678/downloading-and-uploading-files-through-safari-ios。 - caw
1
嘿,我正在拦截UIWebView请求并使用NSUrlsessionDownload任务下载文件。文件名在“Content-Disposition”下。现在我遇到了一些问题,之前它是可以工作的,但现在似乎有些变化并停止工作了,你能帮我吗? - Sanoj Kashyap

2
在我的情况下,在头部添加以下内容
content-disposition: attachment; filename="myfile.pdf"

为了在iOS Safari中触发或强制下载提示(从而防止其打开文件),必须与将链接的目标属性设置为隐藏iframe一起使用。像这样:
<iframe style="display:none;" name="iframe_download"></iframe>
<a href="myfile.pdf" target="iframe_download">Link Text</a>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接