2011-11-29 13 views
13

मैं एक स्पष्ट पर अटक गया हूं:प्ले 2.0 के साथ बाइनरी कैसे प्रस्तुत करें?

Play 2.0 का उपयोग कर नियंत्रक से छवि कैसे प्रस्तुत करें?

प्ले 1.0 के साथ renderBinary() विधि थी। अब यह चला गया है

प्ले-RC1 केवल 3 सामग्री प्रकार परिभाषित: TXT, HTML और XML ....

इसलिए, कैसे एक द्विआधारी नियंत्रक से सेवा करने के लिए?

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 की तरह:

उत्तर

24

प्ले 2.x के साथ स्काला में, बजाय renderBinary() या Binary() जस्ट उपयोग

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") 
    } 
} 

आशा इस मदद करता है।

+0

धन्यवाद, हालांकि मैं वास्तविक को आगे बढ़ने की सलाह दूंगा मॉडल तक फ़ाइल का उपयोग। – DavidG

6

यहाँ एक स्काला समाधान है। 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) 

} 

लेकिन वहाँ क्या बजाय का उपयोग करने का कोई सुझाव है। मुझे लगता है कि अगर आवश्यक हो तो ऐसा करने के लिए कोई व्यक्ति अपनी खुद की वस्तु बना सकता है।

+1

धन्यवाद। मुझे स्पष्ट करना चाहिए था ... जावा संस्करण के बारे में क्या? –

6

जावा में, प्रति नवीनतम Play 2.0 कोड के रूप में, परिणाम वर्ग एक विधि status जो एक बाइट [] पैरामीटर के रूप में है, जो अपने परिदृश्य के लिए उपयोग की होना चाहिए प्राप्त कर सकते हैं शामिल हैं।

+0

धन्यवाद, इस विधि का इंतजार कर रहा है ... –

+0

@OlivierRefalo आपका स्वागत है :) –

+0

जावा के लिए मेरा समाधान देखें: http://stackoverflow.com/a/20838010/554796 – Benchik