【问题标题】:Sending Image Files back to the Browser将图像文件发送回浏览器
【发布时间】:2013-09-10 15:00:57
【问题描述】:

我的应用程序具有在我的网站上显示的 jpg 图像文件。

在我的 GSP 中我这样做:

<img class="itemThumImage border-radius-top-3px" src="${createLink(controller:'item', action:'getImage', id:item.id)}" />

我的 ItemConroller 的 getImage 操作是:

def getImage() {
   def item = Item.get(params.id)
   def file = new File(grailsApplication.parentContext.servletContext.getRealPath(item.id))

   response.setContentType("image/jpeg")
   response.setHeader("Content-disposition", "filename=\"${item.id}.jpg\"")
   response.setContentLength(fileBytes.size())
   response.outputStream << file.readBytes()
   response.outputStream.close()
}

这是将图像发送回浏览器的好方法吗?我认为图像已加载到堆中。我可以以某种方式加速这个过程吗?最后一行需要close() 还是flush() 或两者兼而有之?

【问题讨论】:

    标签: java spring servlets grails grails-2.0


    【解决方案1】:

    这对开发/测试有好处(但不要忘记在关闭响应后return null)。

    但是从不在生产系统上这样做。您需要在 Tomcat 前面有一个前端服务器,例如 Nginx 或 Apache HTTPD 服务器。

    我推荐 Nginx。对于 Nginx,您可以使用以下配置来提供此文件:

    location /item/getImage/ {
        alias /path/to/directory/with/images;
    }
    
    location / {
        //proxy to your Tomcat instance
        proxy_pass http://127.0.0.1:8080; 
    }
    

    【讨论】:

    • 为什么我不能在生产环境中使用 Tomcat 执行此操作?
    • 因为 tomcat 提供静态文件的速度慢了几千倍
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-07
    • 2014-04-17
    • 2016-04-09
    • 1970-01-01
    • 1970-01-01
    • 2011-12-14
    • 2015-04-22
    相关资源
    最近更新 更多