Frage

Ich stecke auf einem offensichtlichen fest:

Wie rendere ich ein Bild von einem Controller mit Play 2.0?

Mit Play 1.0 gab es eine renderBinary() Methode. Es ist jetzt weg.

Play-RC1 nur definierte 3 Inhaltstypen: TXT, HTML und XML ....

Deswegen, Wie dient man eine Binärdehnung vom Controller?

War es hilfreich?

Lösung

In Scala mit Play 2.x anstelle von renderBinary() oder Binary() Juste -Verwendung

Ok(byteArray).as(mimeType)

Im vorherigen Beispiel gibt dies:

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")
  }
}

Hoffe das hilft.

Andere Tipps

Hier ist eine Scala -Lösung:

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 ist eine Methode von Controller, so wie Ok. Der Quellcode in Results.scala schlägt vor, dass es gelöscht wird:

/** 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)

}

Es gibt jedoch keinen Vorschlag, was stattdessen verwendet werden soll. Ich nehme an, man könnte einfach sein eigenes Objekt erstellen, um dies bei Bedarf zu tun.

In Java, gemäß dem letzten Play 2.0 Code, Ergebnisse Klasse enthält eine Methode Status die eine erhalten kann Byte[ als Parameter, der für Ihr Szenario von Nutzen sein sollte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top