2011-11-20 11 views
9

मैं स्कैला पर Play 2.0 ढांचे के साथ प्रयोग कर रहा हूं। मैं यह समझने की कोशिश कर रहा हूं कि कस्टम HTTP शीर्षलेख कैसे भेजना है - इस मामले में, "सामग्री-विस्थापन: अनुलग्नक; फ़ाइल नाम = foo.bar"। मुझे ऐसा करने के तरीके पर प्रलेखन नहीं मिल रहा है (प्ले 2.0 पर प्रलेखन इस बिंदु पर समग्र रूप से सुंदर है)।Play 2.0 (स्कैला) में HTTP शीर्षलेख सेट करना?

कोई संकेत?

उत्तर

28

परिणाम प्रकार play.api.mvc.Results में हैं, here पर गिटहब पर देखें।

हेडर को जोड़ने के लिए, आप लिखते हैं:

Ok 
    .withHeaders(CONTENT_TYPE -> "application/octet-stream") 
    .withHeaders(CONTENT_DISPOSITION -> "attachment; filename=foo.txt") 

या

Ok.withHeaders(
    CONTENT_TYPE -> "application/octet-stream", 
    CONTENT_DISPOSITION -> "attachment; filename=foo.txt" 
) 

और यहाँ एक पूर्ण नमूना डाउनलोड है:

def download = Action { 
    import org.apache.commons.io.IOUtils 
    val input = Play.current.resourceAsStream("public/downloads/Image.png") 
    input.map { is => 
    Ok(IOUtils.toByteArray(is)) 
     .withHeaders(CONTENT_DISPOSITION -> "attachment; filename=foo.png") 
    }.getOrElse(NotFound("File not found!")) 
} 

एक फ़ाइल डाउनलोड करने के लिए, अब खेलें एक और आसान तरीका प्रदान करता है:

def download = Action { 
    Ok.sendFile(new java.io.File("public/downloads/Image1.png"), fileName = (name) => "foo.png") 
} 

नुकसान यह है कि फ़ाइल नहीं मिलने पर यह अपवाद में परिणाम देता है। साथ ही, फ़ाइल नाम एक फ़ंक्शन के माध्यम से निर्दिष्ट किया गया है, जो थोड़ा अधिक लगता है।

+2

'withHeaders' विधि को एकाधिक टुपल पैरामीटर के साथ एक बार बुलाया जा सकता है। – Rajish

+0

धन्यवाद, मैंने तदनुसार पोस्ट संपादित किया है। –