从Spring控制器返回视频可以通过以下步骤实现:
@RequestMapping
注解来指定请求的URL和HTTP方法。ResponseEntity<byte[]>
作为方法的返回类型,并将视频数据和响应头信息封装到ResponseEntity
对象中返回。如果使用输入流形式,可以使用StreamingResponseBody
作为方法的返回类型,并在StreamingResponseBody
的writeTo
方法中将视频数据写入输出流。以下是一个示例代码:
import org.springframework.core.io.ClassPathResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
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.ResponseBody;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
@Controller
@RequestMapping("/video")
public class VideoController {
@GetMapping("/play")
public ResponseEntity<byte[]> playVideo() throws IOException {
ClassPathResource videoFile = new ClassPathResource("path/to/video.mp4");
byte[] videoData = Files.readAllBytes(videoFile.getFile().toPath());
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", "video.mp4");
return ResponseEntity.ok()
.headers(headers)
.body(videoData);
}
@GetMapping("/stream")
@ResponseBody
public StreamingResponseBody streamVideo() throws IOException {
ClassPathResource videoFile = new ClassPathResource("path/to/video.mp4");
InputStream videoStream = videoFile.getInputStream();
return outputStream -> {
int nRead;
byte[] data = new byte[1024];
while ((nRead = videoStream.read(data, 0, data.length)) != -1) {
outputStream.write(data, 0, nRead);
}
videoStream.close();
};
}
}
在上述示例代码中,playVideo
方法使用字节数组形式返回视频数据,streamVideo
方法使用输入流形式返回视频数据。你可以根据实际需求选择其中一种方式。
请注意,上述示例代码中的视频文件路径为示例路径,你需要将其替换为你实际的视频文件路径。另外,你还可以根据需要添加视频处理、权限验证等其他逻辑。
推荐的腾讯云相关产品:腾讯云点播(https://cloud.tencent.com/product/vod)
领取专属 10元无门槛券
手把手带您无忧上云