¿Cómo renderizar un binario con Play 2.0?
-
25-10-2019 - |
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?
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.