Comment rendre un fichier binaire avec le jeu 2.0?
-
25-10-2019 - |
Question
Je suis coincé sur une évidence:
Comment rendre une image à partir d'un contrôleur en utilisant le jeu 2.0?
Avec le jeu 1.0 il y avait une méthode renderBinary()
. Il est maintenant disparu.
Play-RC1 uniquement défini 3 types de contenu: Txt, et Xml .... Html
Par conséquent, comment servir un binaire du contrôleur?
La solution
Scala avec Play 2.x, au lieu d'utiliser renderBinary()
ou Binary()
juste
Ok(byteArray).as(mimeType)
Dans l'exemple précédent, ce qui donne:
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")
}
}
Hope this helps.
Autres conseils
Voici une solution 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
est une méthode de Controller
, tout comme Ok
. Le code source Results.scala
suggère qu'il sera supprimé:
/** 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)
}
Mais il n'y a aucune suggestion de ce qu'il faut utiliser à la place. Je suppose que l'on pourrait tout simplement créer un objet propre à faire de si nécessaire.
En Java, selon le dernier jeu de code 2.0, Résultats classe contient une méthode état qui peut recevoir un octet [] comme paramètre, qui devrait être utiliser pour votre scénario.