Come rendere un binario con il gioco 2.0?
-
25-10-2019 - |
Domanda
Sono bloccato su un'ovvia:
Come per il rendering di un'immagine da un controller tramite la riproduzione 2.0?
Con il gioco 1.0 c'era un metodo renderBinary()
. E 'ormai andato.
Play-RC1 definito solo 3 tipi di contenuto: TXT, HTML e XML ....
Pertanto, come servire un binario dal controller?
Soluzione
In Scala con Play 2.x, invece di renderBinary()
o l'uso Binary()
juste
Ok(byteArray).as(mimeType)
Nell'esempio precedente, questo dà:
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")
}
}
Spero che questo aiuti.
Altri suggerimenti
Ecco una soluzione 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
è un metodo di Controller
, proprio come Ok
. Il codice sorgente in Results.scala
suggerisce che sarà cancellato:
/** 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)
}
Ma non v'è alcuna indicazione di ciò che da usare al posto. Suppongo che si potrebbe semplicemente creare il proprio oggetto per fare questo, se necessario.
In Java, come da ultimo codice Giocare con 2.0, Risultati classe contiene un metodo stato che può ricevere un byte [] come parametro, che dovrebbe essere di utilizzare per lo scenario.