GWT HTTP-ответ getText () как двоичный - PullRequest
4 голосов
/ 17 мая 2011

Я работаю над приложением GWT, которое выполняет вызов REST для двоичных данных. Я пытаюсь использовать RequestBuilder от GWT. Проблема заключается в том, что в ответе предлагается только метод 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 преобразует их в строку?

Ответы [ 2 ]

3 голосов
/ 18 мая 2011

HTTP может передавать текстовые и двоичные файлы, но Javascript может получать текст только через XHR.Если вы хотите отправить двоичные данные через него, тогда Base64 закодируйте его.GWT может обрабатывать Base64 .

Обновление: в последних браузерах (конец 2013 года), обработка двоичного массива может быть достигнута через TypedArray.См. Поддержка браузера .

1 голос
/ 01 июля 2011

Вы можете получить двоичное изображение в GWT, используя JSNI.Имейте в виду, что это не работает с 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
}-*/;

Я только что закончил исследование аналогичного вопроса, в котором я добавил дополнительную информацию: Генерация встроенного изображения с помощью Java Java

...