2015-06-23 87 views
1

我想使用Play框架從數據庫下載文件。 但是當我使用這個代碼,我得到這個消息:PlayFramework:值不是Array的成員[Byte]

值不是陣列成員(字節)

如果我改變Ok(bytOfImage.as("image/jpg"))Ok(bytOfImage)它的作品不錯,但我得到一個文件有一個名字:secondindex沒有.jpg

這裏是我的控制器:

def secondindex(number: Int) = Action { 
    var bytOfImage = Array[Byte](1) 

    val conn = DB.getConnection() 
    try { 

     val stmt = conn.createStatement 
     val rs = stmt.executeQuery("SELECT image from images where id = " + number) 


     while(rs.next()) { 
     var blob = rs.getBlob("image") 

     bytOfImage = blob.getBytes(1, blob.length().toInt) 
     blob.free() 
     } 

    } finally { 
     conn.close() } 
     Ok(bytOfImage.as("image/jpg")) 
    } 

回答

0

您對錯誤的對象調用as方法。它看起來應該如下:

Ok(bytOfImage).as("image/jpg") 
+0

謝謝!是工作!你能否告訴我如何下載我的圖片,因爲現在它顯示在瀏覽器中 - 但我想下載。 –

+0

您需要將「Content-Disposition」標題設置爲「附件」。按照這個http://stackoverflow.com/questions/11559304/how-to-send-a-file-to-browser-for-downloading答案,你可以將InputStream傳遞給'Ok()'方法來設置它自動。將你的字節數組轉換成流不應該是一個問題。 –

0

如果你需要下載從瀏覽器中的圖像,你可以使用方法SimpleResult 和頭"Content-Disposition" -> "attachment"

添加如換行Ok(bytOfImage.as("image/jpg"))在你的代碼上

val enumImg: Enumerator[Array[Byte]] = { Enumerator(bytOfImage) } 
SimpleResult (
header = ResponseHeader(200, Map("Content-Disposition" -> "attachment")), 
body = enumImg 
)