1

在 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() 均无济于事。有什么想法可能导致这种情况吗?

4

0 回答 0