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