GWT HTTP отговор 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 да ги преобразува в String?


person Naijaba    schedule 16.05.2011    source източник


Отговори (2)


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

Актуализация: в последните браузъри (края на 2013 г.), обработката на двоичен масив може да бъде постигната чрез TypedArray. Вижте поддръжка на браузър за него.

person Peter Knego    schedule 17.05.2011
comment
И аз го подозирах. Ще трябва да модифицираме нашия API, за да кодира данните с база 64, преди да ги върнем. - person Naijaba; 19.05.2011
comment
Това е грешен отговор. HTTP може да прехвърля двоични данни. Често срещан пример са изображенията. - person maasg; 01.07.2011
comment
Да, трябва да го направя по-ясно: HTTP може да изтегля и качва двоичен файл, купуването на двоичен файл не е достъпно за Javascript и следователно за GWT. - person Peter Knego; 03.01.2012
comment
Двоичният файл е достъпен за JS и GWT чрез модерни браузъри. Вижте TypedArrays и lib-gwt-файл от org.vectomatic - person Federico Pugnali; 30.12.2013
comment
Да, TypedArrays са сравнително скорошно допълнение. Те не се поддържаха в основните браузъри, когато написах отговора. Актуализиране... - person Peter Knego; 31.12.2013

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

person maasg    schedule 01.07.2011