【问题标题】:Upload files using GWT Request Factory使用 GWT 请求工厂上传文件
【发布时间】:2013-04-02 11:20:04
【问题描述】:

是否可以通过请求工厂上传文件?简单的例子会很有帮助。

【问题讨论】:

    标签: java gwt file-upload requestfactory


    【解决方案1】:

    其实你可以!,我已经有一个应用程序在做。

    1. 您需要支持FileApi 的浏览器(现代浏览器需要)
    2. 您必须编写一些 jsni 代码才能将文件内容读入 base64 字符串。
    3. 您将收到(异步)一个字符串,您可以将其分配给应用程序中的任何 Bean 属性,并通过 RF、RPC 等方式发送。

    这里有我使用的最重要代码的复制/粘贴:

       public final native void readAsDataURL(MyClass that, FileUpload input) /*-{
         var files = input.@com.google.gwt.user.client.ui.FileUpload::getElement()().files;
         var reader = new FileReader();  
         reader.onload = function (evt) {
             that.@...MyClass::done(Ljava/lang/String;)(evt.target.result);
         }
         reader.readAsDataURL(files[0]);
        }-*/;
    

    这将是我的 gwtupload 库中即将推出的功能。

    【讨论】:

    • 您也可以使用Elemental 库。应该可以在没有 JSNI 的情况下使用大部分 FileAPI(即 FileReader)。
    • 我试了 Elemental 发现了一些问题,一是它对 chrome 非常特殊,二是我在 FF 中创建一些对象时遇到了问题(我现在不记得了),所以我更喜欢支持fileapi的所有浏览器的通用实现
    • 你是对的。那里有一些铬的细节。但我真的很喜欢这个 API,因为它非常接近 javascript API/规范。因此,您可以轻松地从 HTML5 Rocks 中获取示例并将其快速移植到 Elemental。希望随着时间的推移,大多数供应商前缀都会被删除。然后 Elemental 可以轻松支持不同的浏览器
    • 是的,这是我想念的东西:大多数现代浏览器的通用模块,以及 chrome 的特定模块。我的一些实验适用于 webkit、FF 和 IE9,但其中大多数实验都失败了,因为一些琐碎的语法问题。另一个问题是它在hosted-mode 中对我不起作用。最后是缺乏有关问题的信息。
    【解决方案2】:

    IMO RPCRequest Factory 感觉是 XMLHttpRequest,这不允许您 encode 并将 local 文件发送到 server

    您需要编写自己的 servlet 和 GWT FormPanel

    servlet 及其mapping 完成example here

    【讨论】:

    • 不正确,实际上XMLHttpRequest 允许在现代浏览器中发送文件,只需使用发送方法xhr.send(myfile.files[0]),但您必须为 xhr 调整 gwt 包装器。
    • @downvoter ..我提到它作为 IMO ..它不是答案 :) 感谢您阅读我的答案。
    【解决方案3】:

    没有。

    您需要创建一个单独的文件上传 servlet。见Basic File upload in GWT

    【讨论】:

      猜你喜欢
      • 2011-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-09
      相关资源
      最近更新 更多