有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法使用GWT显示从REST webservice检索的图像

我有一个内置GWT的前端,从RESTful web服务检索数据。我需要在服务器端生成一个映像(单词云),并将其提供给客户端。一些搜索表明我需要将其作为base64编码字符串发送。我没有从客户端获取数据

作为测试,我去掉了编码,将内容类型设置为“image/png”,并在浏览器中键入URL,并且能够看到图像,因此我知道服务器在这方面工作正常。我怀疑我的标题和/或客户端的解释有问题。任何帮助都将不胜感激

在客户端,我的代码是:

        String url = BASE_URL + CLOUD + "?" + TITLE_TXT + docTitle;
        url = URL.encode(url);

        RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, url);
        try {
            Request request = builder.sendRequest(null, new RequestCallback() {

                @Override
                public void onError(Request request, Throwable exception) {
                    displayError("Couldnt' retrieve word cloud - request error");

                }
                @Override
                public void onResponseReceived(Request request, Response response) {


                    if (200 == response.getStatusCode()) {
                        String imgTxt = response.getText();
                        Image img =  new Image();
                        img.setUrl("data:image/png;base64,"+imgTxt);
                        updateWordCloud(img);
                    } else {
                        displayError("Couldn't retrieve word cloud (" + response.getStatusText()
                                + ")");
                    }
                }
            });
        } catch (RequestException e) {
            displayError("Couldn't retrieve word cloud");
        }

服务器代码(Python CherryPy)为:

 def GET(self, title=None):
        idx = self.title_list.index(title)
        docname = self.file_list[idx]
        text = open(path.join(self.base_path, docname)).read()
        wordcloud = self.wc.generate(text)
        myimg = wordcloud.to_image()
        buf = StringIO()
        myimg.save(buf, format='png')
        encoded = base64.b64encode(buf.read())
        cherrypy.response.headers['Content-Type'] = 'text/plain'
        cherrypy.response.headers['Content-Transfer-Encoding'] = 'base64'
        return encoded

共 (1) 个答案

  1. # 1 楼答案

    我解决了自己的问题——我需要对buf进行编码。getvalue(),而不是buf。read()