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

11
在GWT应用程序中,我想要一个按钮,点击它后会下载给定URL上的文件。这是一个以.out结尾的纯文本日志文件(不是html)。
我的第一次尝试是使用"window.open()"(尝试了gwt和本地javascript window.open)。
不幸的是,浏览器(尝试了Chrome,Firefox和IE)试图变得很聪明,并注意到该文件是一个文本文件,因此在弹出窗口中显示内容而不是下载它。更糟糕的是,似乎浏览器将.out文件呈现为html文件,并且弄乱了所有换行和制表符(基本上是任何空格)。
我无法控制提供.out文件的http服务器。因此,我正在寻找客户端解决方案。
有人可以为我建议一个解决方案吗?
谢谢。

3个回答

10

这已经过时了。HTML5为a元素添加了download属性,使其成为可能。 - Michael Hoffmann

8
使用HTML5,现在可以设置“download”属性在元素中进行下载。
<a href="http://link/to/file" download="FileName">Download it!</a>

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


本文介绍了使用HTML5中的download属性来提供更好的下载功能。通过使用此属性,您可以将文件名提前定义并提供一个下载标签来告诉浏览器它需要下载该链接,而不是在当前窗口中打开。此外,还讨论了其他一些下载相关的特性和技巧。

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;

抱歉,我对GWT和JavaScript领域还很陌生,您能详细解释一下吗?非常感谢您的快速回复。 - RAY
我还应该注意到,我无法控制提供 .out 文件的 HTTP 服务器。谢谢。 - RAY
@nissemand 是的,找不到那篇博客的副本。这种情况时有发生。 - VMAtm
没关系,只是想让你知道。 - Felix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接