在grails中编写代理

时间:2012-03-16 00:21:43

标签: http grails character-encoding

我正在使用Gralis 1.3.7。我正在编写一个控制器,需要从另一台服务器获取PDF文件并将其返回给客户端。我想以一种合理有效的方式做到这一点,例如:

class DocController {
    def view = {
        URL source = new URL("http://server.com?docid=${params.docid}");

        response.contentType = 'application/pdf';
        // Something like this to set the content length
        response.setHeader("Content-Length", source.contentLength.toString());
        response << source.openStream();
    }
}

我遇到的问题是如何根据source返回的信息确定如何设置控制器响应的内容长度。我无法在Grails上找到URL类的文档。

最好的方法是什么?

基因

已编辑:已修复setHeader

中的参数值

更新2012年3月16日10:49太平洋标准时间

更新于2012年3月19日10:45太平洋标准时间 将后续行动移至另一个问题。

1 个答案:

答案 0 :(得分:2)

您可以使用java.net.URLConnection对象,以便您对网址进行更详细的处理。

URLConnection connection = new URL(url).openConnection()

def url = new URL("http://www.aboutgroovy.com")
def connection = url.openConnection()
println connection.responseCode        // ===> 200
println connection.responseMessage     // ===> OK
println connection.contentLength       // ===> 4216
println connection.contentType         // ===> text/html
println connection.date                // ===> 1191250061000
println connection.lastModified

// print headers
connection.headerFields.each{println it}

您的示例应如下所示:

class DocController {
    def view = {
        URL source = new URL("http://server.com?docid=${params.docid}");
        URLConnection connection = source.openConnection();

        response.contentType = 'application/pdf';

        // Set the content length
        response.setHeader("Content-Length", connection.contentLength.toString());

        // Get the input stream from the connection
        response.outputStream << connection.getInputStream();
    }
}