我正在尝试在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()
}
错误:“尝试从封闭流中读取。”
答案 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