我有一个控制器,它应该返回音频文件的一部分(为了测试,我让它返回文件中的所有字节):
@GetMapping("/voice")
@CrossOrigin
public ResponseEntity<byte[]> streamBytes(
@RequestParam(name = "name") String name) throws IOException {
File file = new File(getClass().getResource("/static/" +
calculatePath(name)).getFile());
byte[] fileContent = Files.readAllBytes(file.toPath());
int numBytes = fileContent.length;
return ResponseEntity.status(HttpStatus.OK)
.contentType(MediaType.parseMediaType("audio/mpeg"))
.body(Arrays.copyOfRange(fileContent, 0, numBytes));
}
此控制器的路径用于
<audio id='audioPlayer' src='controllerPath'></audio>
声音已正确加载,但音频播放器不允许快进或倒带。如果我使用文件的直接URL(因为文件在resources/static/file.mp3
中)-http://localhost:8082/file.mp3
,我可以很好地快进和快退。
此外,当我尝试将HttpStatus.OK
更改为HttpStatus.PARTIAL_CONTENT
时,播放器完全拒绝播放文件。
当前的控制器代码是怎么阻止快进和快退的?
1条答案
按热度按时间mutmk8jj1#
我将return语句改为
^添加了
.header("Accept-Ranges", "bytes")
部分。现在快进快退工作如预期!