这玩意我看好多人没提到,我就想着发个笔记,说不定也有人会遇到。
首先背景是这样的,前端有个在线预览mp4的需求,视频播放器会去分段请求视频文件
在后端中通过判断请求的范围然后返回对应的字节流给前端
GetObjectArgs objectArgs = GetObjectArgs.builder().bucket(prop.getBucketName())
.object(objectName)
.offset(start)
.length(end-start+1)
.build();
response.setHeader("Accept-Ranges","bytes");
response.setHeader("Content-Length", String.valueOf(end-start+1));
//Content-Range,格式为:[要下载的开始位置]-[结束位置]/[文件总大小]
response.setHeader("Content-Range", "bytes " + start + "-" + end + "/" + statObjectResponse.size());
重点在响应头,如果返回了状态200,会导致只能播放视频的前几秒,然后拖动进度条提示加载错误
正确的响应头应该是206,设置以后视频正常加载并播放
response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
最后还想问一个问题,Minio如果我有objectName,如何获取到这个objectName所有的历史版本呢