Java 播放框架:如何使用WS-client读取png图像?

Java 播放框架:如何使用WS-client读取png图像?,java,image,playframework,png,playframework-2.0,Java,Image,Playframework,Png,Playframework 2.0,您好,我想从web服务读取PNG,然后用PNG回复客户端。(想象一下图像代理)。我在WS类中使用Java和Play Framework 2.0 目前我有: public static Result getimage(){ WSRequestHolder requestHolder = WS.url("http://someimageserver/myimage.png"); Promise<WS.Response> getImageResult = requestHolde

您好,我想从web服务读取PNG,然后用PNG回复客户端。(想象一下图像代理)。我在WS类中使用Java和Play Framework 2.0

目前我有:

public static Result getimage(){

  WSRequestHolder requestHolder = WS.url("http://someimageserver/myimage.png");
  Promise<WS.Response> getImageResult = requestHolder.get();
  //How do I create an play.mvc.Result from this so I can sent it back to the callee?

}
public静态结果getimage(){
WSRequestHolder-requestHolder=WS.url(“http://someimageserver/myimage.png");
Promise getImageResult=requestHolder.get();
//如何从中创建play.mvc.Result,以便将其发送回被叫方?
}

非常感谢您的帮助。

在Play 2.0.4中,您不能在Java中这样做。首先,API中没有二进制文件的方法:。我尝试了WS.Response.getBody()方法,但字节不正确

但是Scala API在Play 2.0.4中支持二进制文件:

package controllers

import play.api._
import libs.ws.WS
import play.api.mvc._

object Application extends Controller {

  def getImage = Action {
    Async {
      WS.url("http://someimageserver/myimage.png").get().map { r =>
        Ok(r.getAHCResponse.getResponseBodyAsBytes).as("image/png")
      }
    }
  }

}

从Play 2.1开始,Java支持二进制文件:

谢谢,看来我必须耐心等待:)。不过我找到了一个解决方法(直接使用ning)

//导入
导入java.util.concurrent.Future;
导入com.ning.http.client.AsyncHttpClient;
导入com.ning.http.client.AsyncHttpClient.BoundRequestBuilder;
导入com.ning.http.client.Response;
//请求
AsyncHttpClient AsyncHttpClient=新的AsyncHttpClient();
BoundRequestBuilder prepareGet=asyncHttpClient.prepareGet(url);
Future-frespose=prepareGet.execute();
响应r=frespose.get();
InputStream responseBodyAsStream=r.getResponseBodyAsStream();
返回ok(responseByAsStream).as('image/png');
//imports
import java.util.concurrent.Future;
import com.ning.http.client.AsyncHttpClient;
import com.ning.http.client.AsyncHttpClient.BoundRequestBuilder;
import com.ning.http.client.Response;

//request
AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
BoundRequestBuilder prepareGet = asyncHttpClient.prepareGet(url);
Future<Response> fResponse = prepareGet.execute();
Response r = fResponse.get();
InputStream responseBodyAsStream = r.getResponseBodyAsStream();

return ok(responseBodyAsStream).as('image/png');