質問

私は明らかなものにとどまっています:

Play 2.0を使用してコントローラーから画像をレンダリングする方法は?

プレイ1.0にはaがありました renderBinary() 方法。今はなくなっています。

Play-RC1は、TXT、HTML、XMLの3つのコンテンツタイプのみを定義しました。

したがって、 コントローラーからバイナリを提供する方法は?

役に立ちましたか?

解決

Scalaでは、2.xではなく2.xをプレイします renderBinary() また Binary() Just Use

Ok(byteArray).as(mimeType)

前の例では、これは次のとおりです。

import play.api._
import play.api.Play.current
import play.api.mvc._

object Application extends Controller {

  def index = Action {
    val app = Play.application
    var file = Play.application.getFile("pics/pic.jpg")
    val source = scala.io.Source.fromFile(file)(scala.io.Codec.ISO8859)
    val byteArray = source.map(_.toByte).toArray
    source.close()

    Ok(byteArray).as("image/jpeg")
  }
}

お役に立てれば。

他のヒント

これがSCALAソリューションです:

package controllers

import play.api._
import play.api.Play.current
import play.api.mvc._

object Application extends Controller {

  def index = Action {
    val app = Play.application
    var file = Play.application.getFile("pics/pic.jpg")
    val source = scala.io.Source.fromFile(file)(scala.io.Codec.ISO8859)
    val byteArray = source.map(_.toByte).toArray
    source.close()

    Binary(byteArray, None, "image/jpeg");
  }
}

Binary の方法です Controller, 、 と同じように Ok. 。ソースコード Results.scala 削除されることを提案します:

/** To be deleted... */
def Binary(data: Array[Byte], length: Option[Long] = None, contentType: String = "application/octet-stream") = {

  val e = Enumerator(data)

  SimpleResult[Array[Byte]](header = ResponseHeader(
    OK,
    Map(CONTENT_TYPE -> contentType) ++ length.map(length =>
      Map(CONTENT_LENGTH -> (length.toString))).getOrElse(Map.empty)),
    body = e)

}

しかし、代わりに何を使用するかについての提案はありません。必要に応じて、これを行うために自分のオブジェクトを単純に作成できると思います。

Javaで、最新のPlay 2.0コードに従って、 結果 クラスにはメソッドが含まれています 状態 受信できます バイト[ パラメーターとして、シナリオに使用する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top