Spring控制器返回音频文件的字节:html音频播放器不能快进或倒带

rlcwz9us  于 2023-04-30  发布在  Spring
关注(0)|答案(1)|浏览(155)

我有一个控制器,它应该返回音频文件的一部分(为了测试,我让它返回文件中的所有字节):

@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时,播放器完全拒绝播放文件。
当前的控制器代码是怎么阻止快进和快退的?

mutmk8jj

mutmk8jj1#

我将return语句改为

return ResponseEntity.status(HttpStatus.OK).contentType(MediaType.parseMediaType("audio/mpeg"))
                .header("Accept-Ranges", "bytes")
                .body(Arrays.copyOfRange(fileContent, 0, numBytes));

^添加了.header("Accept-Ranges", "bytes")部分。现在快进快退工作如预期!

相关问题