可选是否要文件头

This commit is contained in:
shikong 2023-09-21 14:31:06 +08:00
parent 0e586a75bb
commit 8a7c1e7edd
2 changed files with 17 additions and 8 deletions

View File

@ -20,6 +20,7 @@ import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Slf4j
@ -44,11 +45,11 @@ public class VideoController {
@Operation(summary = "获取视频 (目前仅供测试)")
@GetMapping(produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
@ResponseBody
public void video(HttpServletRequest request, HttpServletResponse response, @ParameterObject VideoReq req) {
public void video(HttpServletRequest request, HttpServletResponse response, @ParameterObject VideoReq req, @RequestParam("fileHeader") Boolean fileHeader) {
if(proxyConfig.getEnable()){
wvpService.video(request,response,req.getDeviceCode(), req.getStartTime(), req.getEndTime());
} else {
gb28181DownloadService.video(request,response,req.getDeviceCode(), req.getStartTime(), req.getEndTime());
gb28181DownloadService.video(request,response,req.getDeviceCode(), req.getStartTime(), req.getEndTime(),fileHeader);
}
}
}

View File

@ -75,10 +75,14 @@ public class Gb28181DownloadService {
private final WvpProxyConfig wvpProxyConfig;
private final ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
public void header(HttpServletResponse response, String fileName) {
public void header(HttpServletResponse response) {
response.setContentType("video/mp4");
response.setHeader("Accept-Ranges", "none");
response.setHeader("Connection", "close");
}
public void header(HttpServletResponse response, String fileName) {
header(response);
response.setHeader("Content-Disposition",
MessageFormat.format("attachment; filename=\"{0}.mp4\"",fileName));
}
@ -116,15 +120,19 @@ public class Gb28181DownloadService {
}
@SneakyThrows
public void video(HttpServletRequest request, HttpServletResponse response, String deviceCode, Date startTime, Date endTime) {
public void video(HttpServletRequest request, HttpServletResponse response, String deviceCode, Date startTime, Date endTime, Boolean fileHeader) {
AsyncContext asyncContext = request.startAsync();
asyncContext.start(()->{
HttpServletResponse asyncResponse = (HttpServletResponse)asyncContext.getResponse();
try{
header(response, StringUtils.joinWith("_",
deviceCode,
DateUtil.format(startTime, DatePattern.PURE_DATETIME_FORMAT),
DateUtil.format(endTime, DatePattern.PURE_DATETIME_FORMAT)));
if(fileHeader){
header(response, StringUtils.joinWith("_",
deviceCode,
DateUtil.format(startTime, DatePattern.PURE_DATETIME_FORMAT),
DateUtil.format(endTime, DatePattern.PURE_DATETIME_FORMAT)));
} else {
header(response);
}
download(deviceCode, startTime,endTime).whenComplete((url, e)->{
if(e != null){