HTTP-ответ GWT getText() как двоичный

Я работаю над приложением 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 ответа

Решение

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

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

Вы можете получить двоичное изображение в 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 GWT

Другие вопросы по тегам