我正在尝试使用Spring Boot2流式传输视频文件mp4,我遵循了一些教程,解决方案应该很简单……就像我在下面复制的控制器一样...但别为我工作。
我不明白为什么..。当我将url放入浏览器时,默认的视频播放器就会出现,正在加载...超时后,我在浏览器控制台中收到"net::ERR_CONTENT_LENGTH_MISMATCH 200“。
如果我省略了headers.add("Content-Length",Long.toString(file.length();加载速度非常快,但没有发生任何事情...
@Controller
public class StreamController {
@RequestMapping(path = { "/stream-video-file" }, method = RequestMethod.GET)
public ResponseEntity<StreamingResponseBody> streamFile(
HttpServletRequest request,
HttpServletResponse response) {
File file = new File("/path/to/file.mp4");
if (!file.isFile()) {
return ResponseEntity.status(HttpStatus.NOT_FOUND).body(null);
}
StreamingResponseBody stream = out -> {
try {
final InputStream inputStream = new FileInputStream(file);
byte[] bytes = new byte[1024];
int length;
while ((length = inputStream.read(bytes)) >= 0) {
out.write(bytes, 0, length);
}
inputStream.close();
out.flush();
} catch (final Exception e) {
LOG.error("Exception while reading and streaming data {} ", e);
}
};
final HttpHeaders headers = new HttpHeaders();
headers.add("Content-Type", "video/mp4");
headers.add("Content-Length", Long.toString(file.length()));
return ResponseEntity.ok().headers(headers).body(stream);
}
}我错过了什么?...
编辑
我找到了另一种方法来完成这项工作,不使用StreamingResponseBody,但使用响应头"Range-Content“。
这里有一个非常好的解释:HTTP Range header
发布于 2020-10-15 17:29:55
注释这一行:
headers.add("Content-Type", "video/mp4");https://stackoverflow.com/questions/64340673
复制相似问题