package com.winxur.controller;
import org.apache.commons.io.IOUtils;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import java.io.*;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@RequestMapping(value = "redio")
@Controller
public class RedioController {
/**
* video 视频流一
*
* @param request
* @param response
*/
@RequestMapping(value = "/getVido", method = RequestMethod.GET)
@ResponseBody
public void getVido(HttpServletRequest request, HttpServletResponse response) {
String file = "Av706.mp4";
try {
FileInputStream inputStream = new FileInputStream(file);
byte[] data = new byte[inputStream.available()];
inputStream.read(data);
String diskfilename = "final.mp4";
response.setContentType("video/mp4");
response.setHeader("Content-Disposition", "attachment; filename=\"" + diskfilename + "\"");
System.out.println("data.length " + data.length);
response.setContentLength(data.length);
response.setHeader("Content-Range", "" + Integer.valueOf(data.length - 1));
response.setHeader("Accept-Ranges", "bytes");
response.setHeader("Etag", "W/\"9767057-1323779115364\"");
OutputStream os = response.getOutputStream();
os.write(data);
//先声明的流后关掉!
os.flush();
os.close();
inputStream.close();
} catch (Exception e) {
}
}
/**
* video 视频流二
*
* IOUtils is available in Apache commons io
*/
@RequestMapping(value = "/preview2", method = RequestMethod.GET)
@ResponseBody
public void getPreview2( HttpServletResponse response) {
try {
File file = new File("Av706.mp4");
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
response.setHeader("Content-Disposition", "attachment; filename="+file.getName().replace(" ", "_"));
InputStream iStream = new FileInputStream(file);
IOUtils.copy(iStream, response.getOutputStream());
response.flushBuffer();
} catch (java.nio.file.NoSuchFileException e) {
response.setStatus(HttpStatus.NOT_FOUND.value());
} catch (Exception e) {
response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR.value());
}
}
@ResponseBody
@RequestMapping("/getVideoSrc")
public OutputStream getVideoSrc(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse){
//1.创建文件对象
File f = new File("Av706.mp4");
//2.获取文件名称
String fileName = f.getName();
//3.导出文件
String agent = httpServletRequest.getHeader("User-Agent").toUpperCase();
InputStream fis = null;
OutputStream os = null;
try {
//4.获取输入流
fis = new BufferedInputStream(new FileInputStream(f.getPath()));
byte[] buffer;
buffer = new byte[fis.available()];
fis.read(buffer);
httpServletResponse.reset();
//5.由于火狐和其他浏览器显示名称的方式不相同,需要进行不同的编码处理
if(agent.indexOf("FIREFOX") != -1){//火狐浏览器
httpServletResponse.addHeader("Content-Disposition", "attachment;filename="+ new String(fileName.getBytes("GB2312"),"ISO-8859-1"));
}else{//其他浏览器
httpServletResponse.addHeader("Content-Disposition", "attachment;filename="+ URLEncoder.encode(fileName, "UTF-8"));
}
//6.设置response编码
httpServletResponse.setCharacterEncoding("UTF-8");
httpServletResponse.addHeader("Content-Length", "" + f.length());
//设置输出文件类型
httpServletResponse.setContentType("video/mpeg4");
//7.获取response输出流
os = httpServletResponse.getOutputStream();
os.flush();
//8.输出文件
os.write(buffer);
}catch(Exception e){
System.out.println(e.getMessage());
} finally{
//关闭流
try {
if(fis != null){ fis.close(); }
if(os != null){ os.flush(); }
if(os != null){os.close(); }
return null;
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
return os;
}
//跳转html
@RequestMapping(value ="/hello")
public String index() {
return "hello";
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Insert title here</title>
</head>
<!--JQuery在线引用-->
<script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-3.5.1.min.js"></script>
<body>
<video id="sound" type="video/mp4" controls="controls" autoplay="autoplay"
webkit-playsinline="true" playsinline="true" heigth="100%"></video>
<script>
//创建XMLHttpRequest对象
var xhr = new XMLHttpRequest();
//配置请求方式、请求地址以及是否同步
xhr.open('POST', '/redio/getVideoSrc', true);
//设置请求结果类型为blob
xhr.responseType = 'blob';
//请求成功回调函数
xhr.onload = function(e) {
if (this.status == 200) {//请求成功
//获取blob对象
var blob = this.response;
//获取blob对象地址,并把值赋给容器
$("#sound").attr("src", URL.createObjectURL(blob));
}
};
xhr.send();
</script>
</body>
</html>