GWT:从客户端下载文件,无需服务器干预
Posted
技术标签:
【中文标题】GWT:从客户端下载文件,无需服务器干预【英文标题】:GWT : Download file from client side without server intervention 【发布时间】:2014-09-08 06:52:58 【问题描述】:我在 UI 中显示了用户信息,用户可以将其作为文件下载。当用户单击下载时,我想将客户端中存在的信息写入文件并使其可下载。所以所有的下载功能都应该紧贴客户端,没有任何服务器干预。我遇到了这篇文章,
1) How can a user download a file in client side (Google Web Toolkit)
但没有多大帮助。
谢谢。
【问题讨论】:
你不能。这是所有流行浏览器使用的 javascript 引擎的限制。这是由于安全问题。您不希望未知的 javascript 写入您的文件系统,对吗? Related @Baz :最好的方法是什么?使用 servlet?。 是的,我就是这么做的。 @Baz : 你能提供样品吗? 【参考方案1】:您不能写入文件,但您可以创建一个 blob(使用字符串或 类型化数组)并获取该 blob 的 URL 以创建它可下载(只需将该 URL 作为链接的href
,可能添加download
属性以强制下载)。
目前,GWT 支持类型化数组(仅当您需要二进制而不是文本时才真正有用),但不支持 blob,因此您必须使用 JSNI(或者可能是 GWT Elemental)。
有关浏览器兼容性,请参阅http://caniuse.com/#feat=blobbuilder 和 http://caniuse.com/#feat=blobbuilder、http://caniuse.com/#feat=bloburls 和 http://caniuse.com/#feat=download
注意:还有其他涉及 Flash 或其他插件的解决方案,但浏览器兼容性不会更好(您会使用旧版浏览器,但可能会丢失新版浏览器,尤其是当人们越来越多地切换到“点击播放”时" 插件模式)。
【讨论】:
【参考方案2】:如果文件不是太大,您可以使用 data URI 方案作为
button.setAttribute("download", "filename.ext");
String url = "data:Application/octet-stream;base64," + dataAsBase64;
button.setHref(url);
我在http://jsfiddle.net/cn1ckawL/做了一个小提琴
【讨论】:
以上是关于GWT:从客户端下载文件,无需服务器干预的主要内容,如果未能解决你的问题,请参考以下文章