Excel尝试在IE中打开要下载的文件

时间:2012-03-06 15:13:11

标签: java internet-explorer spring-mvc ms-office

我有一个不起眼的问题,但我会尽力解释。

我们使用SpringMVC映射URL,以便在发出POST请求时,可以触发下载。例如,

的请求
POST /request/bobby.html {POST variables:id=5}

将触发下载与id 5相关的CSV文件。问题是在IE中,执行此操作会为您提供“打开”或“另存为”选项。选择“打开”将按照MS Excel中的预期打开CSV文件,但临时文件将命名为bobby.html。当用户离开Excel并尝试加载另一个ID(例如,6)时,焦点将更改为Excel,但由于请求仍指向bobby.html,因此文件不会刷新。您必须在Excel中关闭该文件,然后才能使用相同名称的新文件,但没有消息告诉用户关闭旧文件。

理想情况下,我希望更改文件名,但正在使用的Spring servlet专门映射到* .html文件,因为我们有其他应用程序在与其他扩展名相同的容器中运行。

我尝试在请求中添加UUID只是为了让它看起来与Excel / IE不同,并且它在某种程度上起作用了......

POST /request/bobby.html?uuid=<uuid> {POST variables:id=6}

使它看起来与IE不同,但Excel仍将基本请求保留为文件名。这允许发出警告,但告诉用户他们的文件名是“bobby.html”而他们无法打开另一个可能比没有任何警告更令人困惑。

我还尝试在最后添加一些内容:

POST /request/bobby.html/<uuid> {POST variables:id=6}

知道如何使这项工作?我知道这种类型的东西在SpringMVC中是可行的,但是使用servlet映射有一种方法可以使它工作吗?

提前致谢。

2 个答案:

答案 0 :(得分:0)

您是否尝试过像/request/bobby_{uuid}.html这样的映射?这样,文件名每次都是唯一的。然后你可以忽略uuid变量。

我从未尝试过这个......只是一个疯狂的想法。

答案 1 :(得分:0)

我终于想出了这个问题的答案,它与文件名无关。我将响应标头Content-Type更改为application/octet-stream而不是application/vnd.ms-excel