我正在使用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太平洋标准时间 将后续行动移至另一个问题。
答案 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();
}
}