9

こんにちは私はWebサービスからPNGを読み取り、PNGでクライアントに応答したいと思います。(イメージプロキシのようなものを考えてください)。私はJavaとPlayFramework2.0をWSクラスで使用しています。

現在私は持っています:

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?

}

どんな助けでも大歓迎です。

4

2 に答える 2

6

Play 2.0.4では、Javaではそれを行うことができません。まず、APIにはバイナリのメソッドがありません:http ://www.playframework.org/documentation/api/2.0.4/java/play/libs/WS.Response.html 。WS.Response.getBody()メソッドを試しましたが、バイトが正しくありませんでした。

ただし、ScalaAPIはPlay2.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でバイナリがサポートされています:https ://github.com/playframework/Play20/blob/master/framework/src/play-java/src/main/java/play/libs/WS.java# L565

于 2012-12-11T21:04:40.087 に答える
5

ありがとう、私は我慢しなければならないようです:)。ただし、回避策を見つけました(直接 ning を使用)。

//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');
于 2012-12-14T12:57:41.583 に答える