基于SpringBoot的online_music_player(播放音乐模块)

201 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情 

播放音乐模块设计

请求响应设计

请求:
{
    get
    /music/get?path=xxx.mp3
}
响应:
{
    data:音乐数据本身的字节信息
}

可以看到我们这里请求的设计采用的是get方法,通过/music/get?path=xxx.mp3获取到响应的音乐信息,这也就和我们之前设计的保存音乐的url匹配上了!

而我们响应只要将对应的音乐字节信息返回给浏览器即可!

代码实现

   //播放音乐
    @RequestMapping("/get")
    public ResponseEntity<byte[]> get(String path){
        //我们要先获取到该音乐保存在服务器下的路径信息!
        try {
            byte[] fileByte = null;
            //获取到文件对象
            File file = new File(SAVE_PATH +File.separator+ path);
            //获取到该文件对象的路径信息
           Path filepath =  file.toPath();
            //读取文件中的所有字节
            fileByte = Files.readAllBytes(filepath);
            return ResponseEntity.ok(fileByte);
        }catch (IOException e){
            e.printStackTrace();
        }
        return ResponseEntity.badRequest().build();
    }

方法讲解

  • Files.readAllBytes(Path path);

    读取文件中的所有字节,参数是Path路径值!

  • File.separator

    与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串!

    就是在Windows系统下是``,而在Linux下是/

  • ReponseEntity

    这是Spring对请求响应的分装,继承了HttpEntity对象,包含Http响应码(HttpStatus),响应头(header),响应体(body)3部分!

    image-20220801125519306

    ResponseEntity类继承自HttpEntity类,被用于Controller层方法 !

    我们可以通过这个类下面提供的静态方法,封装一下响应返回给浏览器!

    image-20220801130437746

    ok静态方法:

    //这个方法若被调用的话,返回OK状态
    public static ResponseEntity.BodyBuilder ok(){
    return status(HttpStatus.OK);
    }
    //这个方法若被调用的话,返回body内容和OK状态
    public static <T> ResponseEntity<T> ok(T body) {
    ResponseEntity.BodyBuilder builder = ok();
    //ResponseEntity可以通过这个builder返回任意类型的body内容
    return builder.body(body);
    }
    

    我们代码里的ResponseEntity.ok(fileByte);就是将ok状态和fileByte音乐文件信息以body的形式返回给前端!

验证结果

音乐文件有TAG标志

![image-20220801131113688](https://bugmd.oss-cn-guangzhou.aliyuncs.com/image-20220801131113688.png) 

假如我们拿到的并不是mp3文件!

image-20220801131314451

这里的隆里电丝.mp3我是通过png文件改成了这个,显然找不到这个音乐标志!