在 HTML 表单提交后提供文件“另存为”对话框
Posted
技术标签:
【中文标题】在 HTML 表单提交后提供文件“另存为”对话框【英文标题】:Offering a file "save as" dialog after an HTML form submit 【发布时间】:2010-09-21 19:36:23 【问题描述】:我有一个 JSP 页面需要在表单中接受一些信息,并说表单提交到同一个页面,并带有一个额外的“感谢 ______”div,该 div 仅在表单提交之后放置(使用参数检查)。
但是,我还需要在服务器上提供一个文件以供下载,但我不能弄乱标头的内容配置来提供文件,因为整个 jsp 页面仍然需要显示。如何在不将表单提交到其他页面的情况下提供此文件?我可以使用什么 javascript 技巧来打开一个可以执行此操作的新窗口? Javascript 可以,但弹出窗口拦截器不会胜过任何事情..
我不能使用 a href 来发送文件——它必须自动完成。
另外,如果文件(pdf)在新窗口中打开,也可以。
【问题讨论】:
【参考方案1】:我以前做过。正常加载您的 JSP 页面,但包含一行 Javascript 重定向到负责提供文件的另一个页面...
location.href = 'serveFile.jsp';
只要serveFile.jsp 正确设置content-disposition
标头,它只会显示保存对话框,实际上不会更改页面。
如何在不转到其他页面的情况下提供此文件?
您在技术上不能,但您可以使用此方法保持在前一页(界面方面),我相信您正在寻找这种无缝效果。
注意:在我实现这个方法的过程中,我发现在保存文件后,导航到不同的页面,然后点击返回按钮,你会再次得到保存对话框。没办法。
【讨论】:
您使用什么内容配置?我正在尝试在同一目录中提供文件。这是serveFile.jsp: 如你所说,浏览器保留在第一页,但除了我上面提到的“谢谢” div 之外,该页面是空白的和文件下载。(它下载的文件似乎被破坏了,但这完全是另一个问题。)抱歉,这个表单每当我按下回车键时都会点击“保存编辑”按钮。 所以,事实证明我只需要将 location.href 行放入文档最底部的脚本中。这看起来是正确的答案。由于我执行 setHeader 的方式,下载的文件仍然损坏,但这是一个单独的问题。谢谢,你是金神。 @Rujiel 那个处置标题对我来说看起来不错。您可能需要的只是文件名周围的引号。此外,您确定将内容类型设置为“application/pdf”吗?将字节写入输出流后,您确定调用了flush()
?郑重声明,我不是金神(但感谢您的赞美!:D),我喜欢帮助别人解决我以前遇到的问题。干杯:)以上是关于在 HTML 表单提交后提供文件“另存为”对话框的主要内容,如果未能解决你的问题,请参考以下文章
用于在另存为对话框中将工作表另存为预命名文件的 VBA 代码