package com.itheima.reggie.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
@Controller
public class FilePlayController {
/**
* 下载
* @return
* @throws IOException
*/
@RequestMapping(value = "/play", method = RequestMethod.GET)
public void update(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)
throws IOException {
BufferedInputStream bufferedInputStream = null;
BufferedOutputStream bufferedOutputStream = null;
String filePath = "C:\\Users\\admin\\Desktop\\全能录屏助手\\20230224_132313.mp4";
try {
File file = new File(filePath);
int fSize = Integer.parseInt(String.valueOf(file.length()));
httpServletResponse.setCharacterEncoding("utf-8");
httpServletResponse.setContentType("application/x-download");
httpServletResponse.setHeader("Accept-Ranges", "bytes");
httpServletResponse.setHeader("Content-Length", String.valueOf(fSize));
//对下载的文件或者播放的视频等取个名字
httpServletResponse.setHeader("Content-Disposition", "attachment;fileName=test.avi");
bufferedInputStream = new BufferedInputStream(new FileInputStream(file));
long position = 0;
if (null != httpServletRequest.getHeader("Range")) {
// 断点续传
httpServletResponse.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
try {
position = Long.parseLong(httpServletRequest.getHeader("Range").replaceAll("bytes=", "").replaceAll("-", ""));
} catch (NumberFormatException e) {
position = 0;
}
}
bufferedOutputStream = new BufferedOutputStream(httpServletResponse.getOutputStream());
// Content-Range的格式:bytes POSITION - ( FILE_SIZE - 1)/FILE_SIZE
httpServletResponse.setHeader("Content-Range", "bytes " + position + "-" + (fSize - 1) + "/" + fSize);
bufferedInputStream.skip(position);
byte[] buffer = new byte[1024 * 10];
int length = 0;
while ((length = bufferedInputStream.read(buffer, 0, buffer.length)) != -1) {
bufferedOutputStream.write(buffer, 0, length);
//TimeUnit.MILLISECONDS.sleep(30);
}
} catch (Exception e) {
} finally {
try {
if (null != bufferedOutputStream)
bufferedOutputStream.flush();
if (null != bufferedInputStream)
bufferedInputStream.close();
if (null != bufferedOutputStream)
bufferedOutputStream.close();
} catch (IOException e) {
}
}
}
}
视频控制1
最新推荐文章于 2024-08-11 20:00:32 发布