当前位置: 首页 > 面试题库 >

使用进度条上传文件,还是从Google Web Toolkit访问HTML 5 File Api?

钱德海
2023-03-14
问题内容

我正在寻找一种使用Google网页工具包通过自定义进度栏上传文件的方法。我不是在寻找显示自己进度条的插件,而是在寻找可以调用我的回调方法并通知进度的东西,这样我就可以显示自己的进度条。

如果那不可能,那么我想知道如何访问HTML5 File API,这样我就可以构建自己的文件上传器小部件。

有任何想法吗?

谢谢。


问题答案:

GWT中存在许多问题,因此很难解决:

  • FormDataGWT中没有对象,因此您必须使用JSNI来获得对象。
  • RequestBuilder不支持发送FormaData,仅支持字符串。
  • RequestBuilder 不支持上传或下载进度通知。
  • FileUpload 不支持多属性。
  • GWT中的Elemental包仅适用于Webkit浏览器,并且上次尝试使用File Api时遇到了一些问题。

幸运的是,gwtquery 1.0.0具有许多有助于解决问题的功能。

在这里,您有一个有效的示例(只有很少的代码行),该示例在所有支持HTML5文件api的浏览器中均可使用:

import static com.google.gwt.query.client.GQuery.*;
[...]

final FileUpload fileUpload = new FileUpload();
RootPanel.get().add(fileUpload);

$(fileUpload)
  // FileUpload does not have a way to set the multiple attribute,
  // we use gQuery instead
  .prop("multiple", true)
  // We use gQuery events mechanism
  .on("change", new Function() {
    public void f() {
      // Use gQuery utils to create a FormData object instead of JSNI
      JavaScriptObject form = JsUtils.runJavascriptFunction(window, "eval", "new FormData()");
      // Get an array with the files selected
      JsArray<JavaScriptObject> files =  $(fileUpload).prop("files");
      // Add each file to the FormData
      for (int i = 0, l = files.length(); i < l; i++) {
        JsUtils.runJavascriptFunction(form, "append", "file-" + i, files.get(i));
      }

      // Use gQuery ajax instead of RequestBuilder because it 
      // supports FormData and progress
      Ajax.ajax(Ajax.createSettings()
                    .setUrl(url)
                    .setData((Properties)form))
        // gQuery ajax returns a promise, making the code more declarative
        .progress(new Function() {
          public void f() {
            double total = arguments(0);
            double done = arguments(1);
            double percent = arguments(2);
            // Here you can update your progress bar
            console.log("Uploaded " + done + "/" + total + " (" + percent + "%)");
          }
        })
        .done(new Function() {
          public void f() {
            console.log("Files uploaded, server response is: " + arguments(0));
          }
        })
        .fail(new Function() {
          public void f() {
            console.log("Something went wrong: " + arguments(0));
          }
        });
    }
});

另一个选择是使用gwtupload,它支持任何浏览器,并且带有一些不错的小部件和进度条,即使您可以插入自己的进度和状态小部件。

它尚未使用HTML5 File
api,而是基于服务器侦听器的ajax解决方案。不过,它将在将来的版本中支持html5,并回退到旧浏览器的ajax机制。当gwtupload支持此功能时,您无需修改​​代码中的任何内容。



 类似资料:
  • 以下是场景: 当我从Firebase存储访问文件时: 我从存储桶(.html、.png、.zip等)获取文件(小,但不超过2MB)。 将文件存储在我本地存储中,这样应用程序就不需要再次下载它,从而消耗服务器的带宽。 每次应用程序需要时从本地存储中使用它。 当我从Firebase宿主访问文件时: null 主持的优点:会更快。链接 PS: 1。我关心的是带宽而不是安全性。

  • 问题内容: 关于此问题,有什么方法可以将[文件从ASP.NET应用程序直接上传到Amazon S3并具有进度条? -—编辑---- 两天后,仍然没有直接的运气。发现了一件看起来很有前途但又不是免费的东西:http : //www.flajaxian.com/ 使用Flash通过进度条直接上传到S3。 问题答案: 我也在寻找解决方案。也许这会有所帮助, 来自AWS Dev Commnity, 但在许

  • 本文向大家介绍jQuery实现文件上传进度条特效,包括了jQuery实现文件上传进度条特效的使用技巧和注意事项,需要的朋友参考一下 上传进度条通常是由前面jquery加后端了脚本器脚本来实现了,今天我们介绍的是一款基本php+jQuery实现文件上传进度条效果的例子,具体细节如下。 最近呢,一个项目做一个进度条的效果出来,这个之前还真没做过。刚好这周没什么东西了,就拿这个来充一下数吧。 文件上传,

  • 问题内容: 对于使用Apache的HTTP客户端(org.apache.http.client)上传文件,我具有以下代码: 效果很好,但是现在我想要一个进度条来显示文件上传的进度。如何做到这一点?我在使用Java的文件上传(带有进度栏)中找到了一个代码段,但是它是为Apache HTTP Client3(org.apache.commons.httpclient)设计的,而RequestEntit

  • 本文向大家介绍原生JS上传大文件显示进度条 php上传文件代码,包括了原生JS上传大文件显示进度条 php上传文件代码的使用技巧和注意事项,需要的朋友参考一下 JS原生上传大文件显示进度条,php上传文件,供大家参考,具体内容如下 在php.ini修改需要的大小: upload_max_filesize = 8M    post_max_size = 10M    memory_limit = 2

  • 问题内容: 我想显示使用servlet上传的上传进度栏。我尝试了iFrame技术Ajax。页面未重新加载,文件也被更新。但是,进度条没有到来。是否有可用于JavaServlts的jQuery进度插件? 谢谢!! 问题答案: 我强烈建议使用jQuery Uploadify 插件进行Ajax文件上传。它还带有进度条。您可以在其演示页面上找到示例。 与JSP /Servlet集成并不难。您基本上可以使“