2016-09-28 80 views
0

我有一個GET請求迷上了這種方法的控制器:如何在http請求中呈現png?

def renderPNG() { 
    URL url = new URL("https://absolute.url.png"); 
    BufferedImage img = ImageIO.read(url); 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    ImageIO.write(img, "png", baos); 
    InputStream is = new ByteArrayInputStream(baos.toByteArray()); 
    DataInputStream ds = new DataInputStream(is); 

    render file: ds, contentType: "image/png" 
} 

但是,當我得到的響應圖像,它的編碼與奇怪的字符。如何檢索圖像並正確解碼以便可以通過瀏覽器進行渲染?

+0

我覺得

/* fetch the user image */ $.ajax({ url: "/controller/renderPNG", type: 'GET', cache: false, success: function (result) { document.getElementById('userImage').src = "data:image/png;base64," + result; } }); 

HTML代碼,在這一點上,你只需要告訴它的圖像瀏覽器字節。 http://stackoverflow.com/questions/12041851/converting-bytes-to-an-image-for-drawing-on-a-html5-canvas – elixir

+0

我不明白 – dopatraman

+0

你可能需要發送一個內容類型頭:'Content-type:image/png'不知道如何用這種語言做到這一點,儘管 –

回答

0

我已經通過將inputStream轉換爲Base64.encode getbyte代碼將它呈現給Veiw來解決您的問題。

def renderPNG() { 
URL url = new URL("http://tineye.com/images/widgets/mona.jpg"); 
      BufferedImage img = ImageIO.read(url); 
      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      ImageIO.write(img, "png", baos); 
      InputStream is = new ByteArrayInputStream(baos.toByteArray()); 
     render(Base64.encode(is?.getBytes())) 
} 

的Java腳本代碼獲取圖像,我們希望呈現圖像

<div><img id="userImage" src=""alt="User Image"></div> 
+0

響應必須指定一種內容類型 – dopatraman