2011-05-16 130 views
4

我正在研究一個GWT應用程序,它可以爲二進制數據創建REST調用。我正在嘗試使用GWT的RequestBuilder。問題是響應只提供了一個getText()方法。GWT HTTP響應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將其轉換爲字符串之前有什麼方法可以獲取數據嗎?

回答

3

HTTP可以傳輸文本和二進制文件,但JavaScript只能通過XHR獲取文本。如果你想通過它發送二進制數據,那麼Base64對它進行編碼。 GWT可以handle Base64

更新:在最近的瀏覽器(2013年底),二進制數組處理可以通過TypedArray來實現。請參閱browser support

+0

我懷疑了。我們將不得不修改我們的API,以便在返回之前對數據進行基礎編碼。 – Naijaba 2011-05-18 23:54:39

+1

這是一個錯誤的答案。 HTTP可以傳輸二進制數據。一個常見的例子是圖像。 – maasg 2011-07-01 16:40:16

+0

是的,我應該更清楚:HTTP可以下載和上傳二進制文件,購買二進制文件不可用於JavaScript,因此GWT。 – 2012-01-03 18:47:29

1

您可以使用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