在 Grails 2.1.1 控制器中,我试图将视频 (mp4) 文件流式传输到浏览器。
以下代码有效。但是,由于我没有指定内容类型,浏览器将直接保存文件。
OutputStream os = response.outputStream
ByteArrayInputStream is = new ByteArrayInputStream(videoInstance.data)
response.contentLength = videoInstance.data.length
os << is
如果我尝试更改它以指定内容类型...
OutputStream os = response.outputStream
ByteArrayInputStream is = new ByteArrayInputStream(videoInstance.data)
response.contentType = videoInstance.contentType
response.contentLength = videoInstance.data.length
os << is
...突然我得到了例外。
Software caused connection abort: socket write error. Stacktrace follows:
Message: Software caused connection abort: socket write error
然后
ERROR errors.GrailsExceptionResolver - IllegalStateException occurred when processing request: getOutputStream() has already been called for this response.
我尝试添加 .os.flush() 和 os.close() 均无济于事。有什么想法可能导致这种情况吗?