使用Jersey流式传输视频文件,而非下载

3
我希望能够流式传输视频文件而不是下载它。我尝试了下面的代码,但它仍然在下载。
@GET
@Path("video")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response video() {
File file = new File("/home/lvaddi/Downloads/demoVideoFile.flv");

ResponseBuilder response = Response.ok(file, MediaType.APPLICATION_OCTET_STREAM);
response.header("Content-Disposition",  "filename=videofile.flv");
return response.build();
}
1个回答

3
您应该使用StreamingOutput来实现这一点,而不是将文件作为主体返回(这将会整个文件一次性发送),示例代码如下:
new StreamingOutput() {
        @Override
        public void write(OutputStream output) throws IOException, WebApplicationException {
            try {
                InputStream input = <get input stream from your file>
                IOUtils.copy(input, output);
                output.flush();
            } finally {
                EntityUtils.consume(response.getEntity());
                IOUtils.closeQuietly(response);
            }
        }
    };

这里还有一个示例在这里


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接