使用 GWT 显示从 REST 网络服务检索到的图像时出现问题
Trouble diisplaying image retrieved from REST webservice with GWT
我在 GWT 中构建了一个前端,从 RESTful 网络服务中检索数据。我需要在服务器端生成一个图像(词云),并将其提供给客户端。一些搜索表明我需要将其作为 base64 编码的字符串发送。我没有在客户端获取数据。
作为测试,我摆脱了编码,将 content-type 设置为 'image/png' 并在我的浏览器中输入 URL,并且能够看到图像,所以我知道在这方面,服务器工作正常。我怀疑我在客户端的 headers and/or 解释有问题。任何帮助将不胜感激。
在客户端,我的代码是:
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
我解决了我自己的问题 - 我需要编码 buf.getvalue(),而不是 buf.read()。
我在 GWT 中构建了一个前端,从 RESTful 网络服务中检索数据。我需要在服务器端生成一个图像(词云),并将其提供给客户端。一些搜索表明我需要将其作为 base64 编码的字符串发送。我没有在客户端获取数据。
作为测试,我摆脱了编码,将 content-type 设置为 'image/png' 并在我的浏览器中输入 URL,并且能够看到图像,所以我知道在这方面,服务器工作正常。我怀疑我在客户端的 headers and/or 解释有问题。任何帮助将不胜感激。
在客户端,我的代码是:
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
我解决了我自己的问题 - 我需要编码 buf.getvalue(),而不是 buf.read()。