grails
  • playframework-2.0
  • grails-controller
  • 2013-04-24 52 views 0 likes 
    0

    我一直在使用Grails框架進行一些測試,現在我正在嘗試在playframework中做類似的事情。在grails中顯示照片vs playframework

    基本上,我想要顯示一些圖片,但要隱藏(爲了能夠避免任何爬行並能夠更改託管)圖片路徑。

    普惠制頁:

    <g:each in="${images}" var="img"> 
         <img class="thumbnail" src='${createLink(controller: "images", action: "displayImage", params:[img: img.name])}'/> 
    </g:each> 
    

    控制器:

    def displayImage() { 
         File image = new File(IMAGES_DIR.absolutePath +'/' + params.img) 
         if(!image.exists()) { 
          response.status = 404 
         } else { 
          response.setContentType("application/jpg") 
          OutputStream out = response.getOutputStream(); 
          out.write(image.bytes); 
          out.close(); 
         } 
    } 
    

    的HTML生成的頁面,它看起來像:

    <img class="thumbnail" src='/myhost/images/displayImage?img=blabla.jpg' /> 
    

    我的問題:

    • 這是一個最好的方法嗎?

    • 關於性能?

    • 這是否比使用http顯示圖片的速度慢?

    • 我可以在Playframework中做這樣的事嗎?如果是,如何?

    謝謝。

    C.C.

    回答

    2

    對於靜態公共資源最有可能使用原始的HTTP服務器將是最快的解決方案,所以我不認爲這是需要通過Java控制器「拖」了。其實你可以玩很相似,但更容易做到這一點 - 因爲播放允許喲返回一個File作爲響應體直接即(從我的頭頂上寫的):反正

    public static Result displayImage(String imagePath) { 
        File image = new File(SOME_CONFIGURED_FOLDER_WITH_IMAGES +'/' + imagePath) 
        if(!image.exists()) return notFound(); 
        return ok(image).as("image/jpg"); 
    } 
    

    ,你應該使用它僅當:

    • 您是要使用額外的HTTP服務器(記住,這遊戲已建成一個?)
    • 你需要帶一些訪問控制
    • 要執行來點perations,即。縮放,裁剪等(在這種情況下,恕我直言,這也是更好地使用播放僅用於創建縮略圖,並與常見的HTTP服務器服務於它...)

    感謝的這種做法:

    • 您不會浪費處理器資源,因爲HTTP服務器只需提供存儲在磁盤上的文件,而不是將其重寫到Result
    • 您的應用可以專注於其他動態操作,因此速度更快。
    • 你可以(也應該)使用典型的站長的技術優化提供靜態內容,如cookie free domains,先進caching headers等(OFC你可以這樣做也中播放控制器,但是......)
    +0

    酷,謝謝。這是我正在尋找的。 – itsme 2013-04-24 20:16:37

    相關問題