Grails中的BinaryContent Stream包装器

时间:2013-04-03 11:17:29

标签: grails

我正在尝试在grails中编写一个简单的包装器,它将从非公共后端Web服务器读取二进制文件,并使其作为流提供给公共服务器。 第一个问题是,考虑到Grails将默认尝试渲染视图,处理此类解决方案的最佳方法是什么。

我正在尝试一种解决方案,导致“尝试从封闭流中读取”。这显然是通过调用响应来避免视图呈现,但我不确定这是否是一个很好的解决方案。

我正在通过以下代码阅读后端文件:

def http = new HTTPBuilder(baseUrl)
http.request(method, ContentType.BINARY) {
                uri.path = path
                uri.query = query
                response.success = { resp, inputstream ->
                    log.info "response status: ${resp.statusLine}"
                    resp.headers.each { h -> log.info " ${h.name} : ${h.value}" }
                    return inputstream
                }

以后尝试通过控制器中的以下方法将其推送到客户端:

def binary(){
      response.outputStream << getBinaryContent("http://aaa" );
      response.flush()
    }

错误:“尝试从封闭流中读取。”

1 个答案:

答案 0 :(得分:1)

如果我没有弄错,<<会关闭回复,因此response.flush()无效。

以下是我用于CSV的代码段,只需替换为您的内容类型:

byte[] bytes = fileGenerated.getBytes() //fileGenerated is a File
response.setContentType("text/csv")
response.setContentLength(bytes.length)
response.setHeader("Content-Disposition", "attachment; filename=" + fileGenerated.getName())
response.outputStream << bytes