“下载”而不是“打开”文本文件

时间:2011-06-24 07:40:40

标签: javascript gwt

在GWT应用程序中,我想要一个按钮,单击该按钮将下载给定URL的文件。它是带有.out后缀的纯文本日志文件(不是html)。

我的第一次尝试是使用“window.open()”(尝试了gwt和本地javascript window.open)

不幸的是,浏览器(试过chrome和firefox等)试图变得聪明,并注意到文件是文本文件,因此在弹出窗口中显示内容,而不是下载它。更糟糕的是,似乎浏览器将.out文件渲染为html,并且会破坏所有换行符和标签(基本上是任何空格)。

我无法控制提供.out文件的http服务器。所以我正在寻找客户端解决方案。

有人可以为我建议一个解决方案吗?

感谢。

3 个答案:

答案 0 :(得分:8)

如果不修改来自服务器的标头,就不可能。

现代浏览器支持download标记中的<a>属性,允许您从普通链接触发下载:https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#Attributes

不幸的是,IE11 is not a "modern browser"

答案 1 :(得分:6)

使用html5,现在可以。在元素中设置“下载”attr。

<a href="http://link/to/file" download="FileName">Download it!</a>

来源:http://updates.html5rocks.com/2011/08/Downloading-resources-in-HTML5-a-download

答案 2 :(得分:4)

将此标题添加到您的文件中。

Content-Disposition: attachment; filename=log file.out;

或在模板中使用此代码:

<html>
  <head>
    <meta http-equiv="content-type" content="attachment; filename=log file.out">

RequestBuilder rb = super.doCreate(serviceEntryPoint);
rb.setHeader("Content-Disposition", "attachment; filename=log file.out;");
return rb;