【问题标题】:Progress percentage from browser on POST multipart request. GWTPOST 多部分请求中浏览器的进度百分比。 GWT
【发布时间】:2015-05-21 06:32:14
【问题描述】:

我正在寻找实现从 GWT 应用程序上传 POST 多部分文件的进度条的方法。

我已经知道开源 GWTUpload 库和 GWT AJAX 请求。

但我无法对服务器端进行任何更改,只能对客户端进行更改。

我发现 Chrome 以某种方式处理了这样的进度 (http://oi58.tinypic.com/2w22ekm.jpg)。我怎样才能找回它?

【问题讨论】:

    标签: post gwt upload progress-bar progress


    【解决方案1】:

    由于XMLHttpRequest 中还没有实现进度,所以也不要发送FormData,我会使用gwtquery Ajax

    我在上一次 GWT.create 演示中做了一个example

    final GQuery progress = $("<div>").css($$("height: 6px, width: 0%, background: #75bff4, position: absolute, top:0px")).appendTo(document);
    GQuery fileUpload = $("<input type='file' multiple >").hide().appendTo(document);
    fileUpload.trigger("click");
    $(fileUpload).on("change", (e) -> {
      final JsArray<JavaScriptObject> files = fileUpload.prop("files");
      JavaScriptObject formData = JsUtils.jsni("eval", "new FormData()");
      for (int i = 0, l = files.length(); i < l; i++) {
        JsUtils.jsni(formData, "append", "file-" + i, files.get(i));
      }
      Settings settings = Ajax.createSettings().setUrl(uploadUrl).setData(formData).setWithCredentials(true);
      Ajax.ajax(settings)
         .done((o) -> {
           progress.remove();
           $("<img src='" + uploadUrl + "?show=file-0-0'>").css($$("position: absolute, top: 0")).appendTo(document);
         })
         .progress((a, b) -> {
           progress.animate("width:" + b + "%");
         });
      return true;
    }); 
    

    【讨论】:

    • 感谢您的回答,马诺洛。您提到“进展尚未在 XMLHttpRequest 中实现”,但是很多 XHR2 与 HTML5 的示例呢?比如:var progressBar = document.getElementById("progressBar"); var xhr = new XMLHttpRequest(); xhr.upload.onprogress = function(e) { var percentComplete = (e.loaded / e.total) * 100; progressBar.value = percentComplete; };
    • 在 GWT Core lib 和 GQuery 中也找不到 JsUtils 类中的方法 jsni,
    • 我的意思是 gwt 类 com.google.gwt.xhr.client.XMLHttpRequest.java 不是 javascript 实现。为了使用这些快捷方法,您必须使用 gwt-query snaptshot (1.4.4-SNAPSHOT) ,否则您必须使用 JsUtils.runJavascriptFunction 而不是 JsUtils.jsni,请参阅我的答案:stackoverflow.com/questions/21088340/…
    • 哇!我已经尝试过 GQuery lib,非常好)我也阅读了您关于类似主题的答案,但在实施过程中我在 jsni(eval, new FormData()) 上遇到错误:[ERROR] [pvr8kapp] - Fri May 22 18:21 :25 EEST 2015 com.harmonic.common.app.client.UncaughtExceptionProxy 严重: (ReferenceError) @com.google.gwt.query.client.js.JsUtils::runJavascriptFunctionImpl(Lcom/google/gwt/core/client/JavaScriptObject; Ljava/lang/String;Lcom/google/gwt/core/client/JsArrayMixed;)([JavaScript object(68958), string: 'eval', JavaScript object(88221)]): 'FormData' is undefined 我做错了什么?
    • 记住new FormData()必须用双引号括起来,它是一个在JS中评估的字符串。或者这是一个不同的问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 2010-10-22
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多