Wie kann man mit Play 2.0 eine Binärdehnung rendern?
-
25-10-2019 - |
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?
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.