可选是否要文件头

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.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
@Slf4j @Slf4j
@ -44,11 +45,11 @@ public class VideoController {
@Operation(summary = "获取视频 (目前仅供测试)") @Operation(summary = "获取视频 (目前仅供测试)")
@GetMapping(produces = MediaType.APPLICATION_OCTET_STREAM_VALUE) @GetMapping(produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
@ResponseBody @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()){ if(proxyConfig.getEnable()){
wvpService.video(request,response,req.getDeviceCode(), req.getStartTime(), req.getEndTime()); wvpService.video(request,response,req.getDeviceCode(), req.getStartTime(), req.getEndTime());
} else { } 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 WvpProxyConfig wvpProxyConfig;
private final ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor(); private final ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
public void header(HttpServletResponse response, String fileName) { public void header(HttpServletResponse response) {
response.setContentType("video/mp4"); response.setContentType("video/mp4");
response.setHeader("Accept-Ranges", "none"); response.setHeader("Accept-Ranges", "none");
response.setHeader("Connection", "close"); response.setHeader("Connection", "close");
}
public void header(HttpServletResponse response, String fileName) {
header(response);
response.setHeader("Content-Disposition", response.setHeader("Content-Disposition",
MessageFormat.format("attachment; filename=\"{0}.mp4\"",fileName)); MessageFormat.format("attachment; filename=\"{0}.mp4\"",fileName));
} }
@ -116,15 +120,19 @@ public class Gb28181DownloadService {
} }
@SneakyThrows @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 asyncContext = request.startAsync();
asyncContext.start(()->{ asyncContext.start(()->{
HttpServletResponse asyncResponse = (HttpServletResponse)asyncContext.getResponse(); HttpServletResponse asyncResponse = (HttpServletResponse)asyncContext.getResponse();
try{ try{
if(fileHeader){
header(response, StringUtils.joinWith("_", header(response, StringUtils.joinWith("_",
deviceCode, deviceCode,
DateUtil.format(startTime, DatePattern.PURE_DATETIME_FORMAT), DateUtil.format(startTime, DatePattern.PURE_DATETIME_FORMAT),
DateUtil.format(endTime, DatePattern.PURE_DATETIME_FORMAT))); DateUtil.format(endTime, DatePattern.PURE_DATETIME_FORMAT)));
} else {
header(response);
}
download(deviceCode, startTime,endTime).whenComplete((url, e)->{ download(deviceCode, startTime,endTime).whenComplete((url, e)->{
if(e != null){ if(e != null){