2011-11-29 66 views
13

Tôi bị kẹt trên một thiết bị rõ ràng:Làm cách nào để hiển thị một tệp nhị phân với phiên bản 2.0?

Làm cách nào để hiển thị hình ảnh từ bộ điều khiển bằng Play 2.0?

Với lượt chơi 1.0, có phương thức renderBinary(). Nó bây giờ đã biến mất.

Play-RC1 chỉ định loại 3 nội dung: Txt, HTML và XML ....

Do đó, làm thế nào để phục vụ cho một nhị phân từ bộ điều khiển?

Trả lời

24

Trong Scala với Play 2.x, thay vì renderBinary() hoặc Binary() Juste sử dụng

Ok(byteArray).as(mimeType) 

Trong ví dụ trước, điều này mang lại:

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.

+0

Cảm ơn, mặc dù tôi khuyên bạn nên di chuyển thực tế truy cập tệp vào mô hình. – DavidG

6

Dưới đây là một giải pháp 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 là một phương pháp Controller, giống như Ok. Mã nguồn trong Results.scala đề xuất mã sẽ bị xóa:

/** 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) 

} 

Nhưng không có đề xuất về việc nên sử dụng thay thế. Tôi cho rằng người ta có thể đơn giản tạo ra một vật thể riêng để làm điều này nếu cần thiết.

+1

cảm ơn bạn. Tôi cần phải làm rõ ... những gì về một phiên bản Java? –

6

Trong Java, theo mới nhất đang chơi 2.0, Kết quả lớp chứa một phương thức status có thể nhận được một byte [] như tham số, mà nên được sử dụng cho trường hợp của bạn.

+0

cảm ơn bạn, đang chờ phương thức này ... –

+0

@OlivierRefalo bạn được chào đón :) –

+0

Đối với java xem giải pháp của tôi: http://stackoverflow.com/a/20838010/554796 – Benchik

Các vấn đề liên quan