GWT:从客户端下载文件,无需服务器干预

GWT:从客户端下载文件,无需服务器干预,gwt,download,gwt-rpc,gwt2,gxt,Gwt,Download,Gwt Rpc,Gwt2,Gxt,我在UI中提供了用户信息,用户可以将其作为文件下载。当用户单击“下载”时,我希望将客户端中的信息写入文件并使其可下载。因此,所有下载功能都应与客户端紧密相连,无需任何服务器干预。我看到了这篇文章 (一) 但没什么帮助 谢谢。您无法写入文件,但您可以创建一个blob(使用字符串或键入的数组)并获取指向该blob的URL以使其可下载(只需将该URL作为链接的href,可能会添加下载属性以强制下载) 目前,GWT对类型化数组有一些支持(只有当您需要二进制而不是文本时才真正有用),但对BLOB不支持,因

我在UI中提供了用户信息,用户可以将其作为文件下载。当用户单击“下载”时,我希望将客户端中的信息写入文件并使其可下载。因此,所有下载功能都应与客户端紧密相连,无需任何服务器干预。我看到了这篇文章

(一)

但没什么帮助


谢谢。

您无法写入文件,但您可以创建一个blob(使用字符串或键入的数组)并获取指向该blob的URL以使其可下载(只需将该URL作为链接的
href
,可能会添加
下载
属性以强制下载)

目前,GWT对类型化数组有一些支持(只有当您需要二进制而不是文本时才真正有用),但对BLOB不支持,因此您必须使用JSNI(或者可能是GWT Elemental)

有关浏览器兼容性,请参见和和


注意:还有其他解决方案涉及Flash或其他pugins,但浏览器兼容性不会更好(你会接触到较旧的浏览器,但可能会丢失较新的浏览器,特别是当人们越来越多地切换到插件的“点击播放”模式时)。

如果文件不是太大,你可以使用数据URI模式作为解决方案

button.setAttribute("download", "filename.ext");    
String url = "data:Application/octet-stream;base64," + dataAsBase64;
button.setHref(url);

我拉了把小提琴,你不能。这是所有流行浏览器使用的javascript引擎的限制。这是由于安全问题。你不会希望未知的javascript写入你的文件系统吧?@Baz:最好的方法是什么?。使用servlets?是的,我就是这么做的。@Baz:你能提供一些样本吗?。