【问题标题】:GWT HTTP Response getText() as BinaryGWT HTTP 响应 getText() 作为二进制
【发布时间】:2011-05-16 21:57:37
【问题描述】:

我正在开发一个对 二进制 数据进行 REST 调用的 GWT 应用程序。我正在尝试使用 GWT 的 RequestBuilder。问题是响应只提供了一个 getText() 方法。

这是重现问题的最简单示例:

private static void sendRequest()
{
    String url = URL.encode("/object/object_id");

    RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.GET, url);
    try
    {
        requestBuilder.sendRequest("", new RequestCallback()
        {
            @Override
            public void onResponseReceived(Request request, Response response)
            {
                String data = response.getText(); ///< Need this to be a byte[] array (e.g. getData())
            }

            @Override
            public void onError(Request request, Throwable exception)
            {
            }
        });
    }
    catch (RequestException RequestException)
    {
    }
}

问题在于 GWT 将响应数据编码为字符串(我认为)是默认平台的编码。在 GWT 将数据转换为 String 之前,有什么方法可以获取数据?

【问题讨论】:

    标签: javascript gwt get request httprequest


    【解决方案1】:

    HTTP 可以传输文本和二进制文件,但 Javascript 只能通过 XHR 获取文本。如果你想通过它发送二进制数据,那么Base64 对其进行编码。 GWT 可以handle Base64

    更新:在最近的浏览器中(2013 年底),二进制数组处理可以通过TypedArray 来实现。请参阅browser support

    【讨论】:

    • 我也很怀疑。在返回数据之前,我们必须修改我们的 API 以对数据进行 base 64 编码。
    • 这是一个错误的答案。 HTTP 可以传输二进制数据。一个常见的例子是图片。
    • 是的,我应该更清楚一点:HTTP 可以下载和上传二进制文件,购买二进制文件不适用于 Javascript 和 GWT。
    • 二进制可用于 JS 和 GWT 通过现代浏览器。请参阅 org.vectomatic 中的 TypedArrays 和 lib-gwt-file
    • 是的,TypedArrays 是一个相对较新的添加。当我写答案时,主流浏览器不支持它们。更新中..
    【解决方案2】:

    您可以使用 JSNI 在 GWT 中获取二进制图像。请注意,它不适用于 IE。 这是一个示例:

    native String getBinaryResource(String url) /*-{
        // ...implemented with JavaScript                 
        var req = new XMLHttpRequest();
        req.open("GET", url, false);  // The last parameter determines whether the request is asynchronous -> this case is sync.
        req.overrideMimeType('text/plain; charset=x-user-defined');
        req.send(null);
        if (req.status == 200) {                    
            return req.responseText;
        } else return null
    }-*/;
    

    我刚刚完成了一个类似问题的研究,我在其中添加了更多信息: Generating an inline-image with java gwt

    【讨论】:

      猜你喜欢
      • 2018-05-19
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 2012-06-16
      • 2018-03-28
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      相关资源
      最近更新 更多