Pregunta

Estoy atrapado en uno obvio:

¿Cómo representar una imagen de un controlador usando Play 2.0?

Con el juego 1.0 hubo un renderBinary() método. Ahora se ha ido.

Play-RC1 solo 3 tipos de contenido definidos: TXT, HTML y XML ....

Por lo tanto, ¿Cómo servir un binario del controlador?

¿Fue útil?

Solución

En Scala con Play 2.x, en lugar de renderBinary() o Binary() juste use

Ok(byteArray).as(mimeType)

En el ejemplo anterior, esto da:

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

Espero que esto ayude.

Otros consejos

Aquí hay una solución de 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 es un método de Controller, al igual que Ok. El código fuente en Results.scala sugiere que se eliminará:

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

}

Pero no hay sugerencia de qué usar en su lugar. Supongo que uno podría simplemente crear el propio objeto para hacer esto si es necesario.

En Java, según el último código de juego 2.0, Resultados La clase contiene un método estado que puede recibir un byte[ como parámetro, que debería ser útil para su escenario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top