0

我有一个返回文件的 Web 服务,我将 Web 服务 url 放在标签中,所以它变成: <a href="webserviceurl/someurl"/>,当我单击链接并尝试在 iPad 上的 safari 中打开它时,它只是给我“safari 无法下载这个文件”。当我在桌面打开此链接并查看响应文档时,文件的标题如下所示:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Disposition: attachment; filename="test.doc"
Content-Type: application/x-msdownload
Transfer-Encoding: chunked
Date: Mon, 10 Jun 2013 02:26:50 GMT

我猜是“Content-Disposition”导致了这种情况,因为我尝试了一个直接链接到文件的 url,就像<a href="/somefile.doc"/>它在 iPad 上完美地预览文件一样。

我无法更改网络服务,我只能修改 javascript 代码,而且我们的应用程序是基于 angularJS 构建的,有什么解决方案可以在 iPad 上预览文件吗?

4

1 回答 1

0

据我所知,ios safari 不支持文件下载,当您在内容处置中有附件时,这是指示浏览器执行的操作。

因此,解决这个问题的唯一方法是使用您可以控制的代理服务器,您的 javascript 应用程序与您的代理服务器通信,您的代理服务器获取您的应用程序的文件,然后将其发送到您的应用程序而没有违规的标头所以 ipad 会打开它进行预览。

简单的php代理:

//-- Get the file url from request url 
//-- Should probably do some security checks on this but this is a simple example
$file = $_GET['file'];

//-- this essentially downloads the file, once again this is a simple example, you may want to use curl and write the file to /tmp otherwise large files will fail or crash your server (also curl is more reliable)
$file_contents = file_get_contents($file);

//-- we now have the file, so we set our custom headers (you will have to decide on this)
header('Content-Type: application/whatever');

//-- dump out the contents, since we have it in memory, we can echo the variable
//-- of writing to file via curl, you would read the file out to the browser at x bytes at a time until completed 
echo $file_contents;

注意:上面真的很不安全,它只是展示一个简单的代理是如何工作的。您需要首先考虑安全性。如果文件将始终位于特定的第 3 方主机上,则对域进行硬编码并仅允许给出文件路径等

于 2013-06-11T09:37:06.003 回答