【问题标题】:GWT : Download file from client side without server interventionGWT:从客户端下载文件,无需服务器干预
【发布时间】:2014-09-08 06:52:58
【问题描述】:

我在 UI 中显示了用户信息,用户可以将其作为文件下载。当用户单击下载时,我想将客户端中存在的信息写入文件并使其可下载。所以所有的下载功能都应该紧贴客户端,没有任何服务器干预。我遇到了这篇文章,

1) How can a user download a file in client side (Google Web Toolkit)

但没有多大帮助。

谢谢。

【问题讨论】:

  • 你不能。这是所有流行浏览器使用的 javascript 引擎的限制。这是由于安全问题。您不希望未知的 javascript 写入您的文件系统,对吗?
  • @Baz :最好的方法是什么?使用 servlet?。
  • 是的,我就是这么做的。
  • @Baz : 你能提供样品吗?

标签: gwt download gwt-rpc gwt2 gxt


【解决方案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/做了一个小提琴

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-01
      • 2022-01-13
      • 1970-01-01
      • 2011-08-15
      • 2021-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多