closures选项,从网站在Internet Explorer中打开xls文件?

背景:

我build立了一个客户端的Web应用程序,允许他们将Excel文件保存到服务器。

当我第一次构build应用程序时,我将这些文件存储在上传文件夹中,并直接从应用程序中的页面(例如文件)链接到它们。

经过反思,这不是很安全,所以我改变了上传文件,将文件存储在web根目录之上,从而阻止了直接访问。

我通过php“检索器”文件(例如文件)将文件传回给用户。 该文件(在一些用户身份validation检查后)如下所示:

header("Content-type: application/octet-stream"); $_file = $_GET['filename']; $sPattern = '/\s*/m'; $sReplace = ''; $_strippedfile = preg_replace( $sPattern, $sReplace, $_file ); header("Content-Disposition: attachment; filename=".$_strippedfile.""); echo file_get_contents('/var/www/uploads/'.$_file); 

问题:

除非用户select在Internet Explorer中“打开”而不是“保存”,否则上述所有工作都可以正常工作。 Excel试图打开文件并抛出'…找不到。 检查文件名称的拼写,并validation文件位置是否正确。

我google了这个错误,它似乎是做的文件的长度(包括path)。 不幸的是临时互联网文件的path不在我的控制之下,所以想知道是否有办法强制用户保存文件,而不是打开它? [显然这可以在本地进行configuration,但是a)我的客户不是非常技术性的,b)因为他们在公司networking上,所有的pipe理权限都被束缚住了。

任何其他的想法欢迎。

您可以通过发送标题来防止在IE8中打开文件

X-Download-Options:noopen

在早期版本中,您需要向包含XLS文件的页面添加一个DOWNLOADOPTIONS元标记。

但是,您所遇到的问题似乎很可能与文件名的长度以及响应中的caching标题无关。 您需要确保您的文件被标记为可caching(例如Cache-Control:private),尤其是在您使用HTTPS的情况下。 请参阅IE 5.5 / IIS 5.0中的通过HTTPS下载文件以进一步讨论。

我不这么认为。 在相关的应用程序中打开文件是浏览器提供的基本function,不能被影响。

这很可悲,因为这里还有一个额外的用户体验问题。 我从互联网打开一个文件,Excel让我编辑它。 所以当我保存的时候,我可以放心地认为这些变化可以回到互联网。 对? 或者至less,他们不会丢失。 对? 对? 尝试向一个非技术用户解释这个文档已经工作了两个小时,这样他们的工作就失去了。

但是我离题了。 你可能想要更多的下载头文件。 我很难想象下载后不能直接打开Excel文件。

你可以尝试发送一个Content-type: application/ms-excel吗? 或者会自动打开,而不是提供保存?

另外,您的文件名是否包含任何特殊字符/变音符? 斜线? 吉普赛国王提到的空间? 所有这些都可能导致打开时出现问题。