题
我被困在一个明显的人身上:
如何使用Play 2.0从控制器中渲染图像?
与播放1.0有一个 renderBinary()
方法。现在已经消失了。
Play-RC1仅定义了3种内容类型:TXT,HTML和XML ....
所以, 如何为控制器提供二进制文件?
解决方案
在带有Play 2.x的Scala中,而不是 renderBinary()
或者 Binary()
Juste使用
Ok(byteArray).as(mimeType)
在上一个示例中,这给出了:
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")
}
}
希望这可以帮助。
其他提示
这是一个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
是一种方法 Controller
, , 就像 Ok
. 。源代码在 Results.scala
建议将其删除:
/** 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)
}
但是没有建议使用什么。我想如果需要,可以简单地创建自己的对象来执行此操作。
在Java中,根据最新播放2.0代码, 结果 类包含一种方法 地位 可以收到一个 字节[ 作为参数,应用于您的情况。
不隶属于 StackOverflow