grails
  • playframework-2.0
  • grails-controller
  • 2013-04-24 69 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

    相关问题