@RequestMapping("/getVideo")
public void getVideo(HttpServletRequest request,HttpServletResponse response,Integer videoId)
{
Video video = videoService.selectById(videoId);
response.reset();
String rangeString = request.getHeader("Range");
try {
OutputStream outputStream = response.getOutputStream();
File file = new File(videoSource.getFileAddress());
if(file.exists()){
RandomAccessFile targetFile = new RandomAccessFile(file, "r");
long fileLength = targetFile.length();
if(rangeString != null){
long range = Long.valueOf(rangeString.substring(rangeString.indexOf("=") + 1, rangeString.indexOf("-")));
response.setHeader("Content-Type", "video/mp4");
response.setHeader("Content-Length", String.valueOf(fileLength - range));
response.setHeader("Content-Range", "bytes "+range+"-"+(fileLength-1)+"/"+fileLength);
response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
targetFile.seek(range);
}else {
response.setHeader("Content-Disposition", "attachment; filename="+videoSource.getFileName() );
response.setHeader("Content-Length", String.valueOf(fileLength));
response.setHeader("Content-Type","application/octet-stream");
}
byte[] cache = new byte[1024 * 300];
int flag;
while ((flag = targetFile.read(cache))!=-1){
outputStream.write(cache, 0, flag);
}
}else {
String message = "file:"+videoSource.getFileName()+" not exists";
response.setHeader("Content-Type","application/json");
outputStream.write(message.getBytes(StandardCharsets.UTF_8));
}
outputStream.flush();
outputStream.close();
} catch (FileNotFoundException e) {
} catch (IOException e) {
}
}
<video id="my-video" class="video-js vjs-big-play-centered" controls="controls" poster="">
<source src="/videoSource/getVideo/${videoId}" type='video/mp4'>
<p class="vjs-no-js">
你的浏览器貌似不支持 %>_<%
<a href="http://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a>
</p>
</video>
<video width="100%" height="270px" controls autoplay id="videoId" style="margin-top: 2px;" controlsList="nodownload">
<source :src="videoUrl" type="video/mp4">
</video>