2011-11-20 24 views
9

Scala'da Play 2.0 çerçevesiyle deneme yapıyorum. Özel HTTP üstbilgilerinin nasıl gönderileceğini anlamaya çalışıyorum - bu durumda, "Content-Disposition: attachment; filename = foo.bar". Nasıl yapılacağına dair belge bulamıyorum (Play 2.0 ile ilgili belgeler bu noktada genel olarak oldukça seyrek).HTTP üstbilgileri Play 2.0 (scala) olarak mı ayarlanıyor?

Herhangi bir ipucu?

cevap

28

Sonuç türleri play.api.mvc.Results içindedir, GitHub'da bkz here. ,

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

Dosya indirmek için:

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

veya

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

Ve burada tam bir örnek indir geçerli: başlıkları eklemek için

, sen yazardım Şimdi başka bir basit yol sunuyor:

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

Dezavantaj, dosyanın bulunamaması durumunda bunun bir istisna sonucudur. Ayrıca, dosya adı biraz overkill gibi görünen bir işlevle belirtilir.

+2

'withHeaders 'yöntemi, birden çok tuple parametresiyle bir kez çağrılabilir. – Rajish

+0

Teşekkürler, yazıyı buna göre düzenledim. –

İlgili konular