基于SpringBoot的online_music_player(上传音乐模块_2)

122 阅读2分钟

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

如何保证上传的文件是音乐文件

可以通过后缀名.MP3嘛?

虽然这是一种最简单的解决方案,但是显然不可以的,如果有人将不是.MP3文件改成后缀为.MP3的音乐文件,不过这种情况比较罕见!

那么我们如何检测用户上传的是音乐文件呢?

其实每一种文件都有自己特点的文件结构!

我们拿.MP3文件举例:

文件结构如下:

image-20220729133426738

一个MP3文件结构分成3部分!

而确定是否是MP3文件可以通过MPEG音频标签

image-20220729134018771

例如我们通过ID3V1128字节中的前3个字节中的标签标志包含了字符TAG就可以判断该文件是MP3文件了!

上传到数据库

我们上传音乐信息到数据库,就是向数据库中的music表中插入数据!

我们首先要明确我们需要到数据库那些信息!

我们看一下我们music表结构!

image-20220728232037725

id:自增主键不需要上传! title:歌曲名我们可以通过文件名去掉.MP3后缀获取! singer:歌手 我们请求信息中有! time:我们可以通过java中的SimpleDateFormat类获取到上传时间 url:音乐的url,因为我们上传的音乐就是用来后面播放的嘛,而我们数据的传输是通过http协议的,

我们后面通过这个url就可以找到该音乐的位置!

//先用这样的方式保存url
/music/get?title(歌曲名称)

user_id:我们可以通过session中获取上传用户id

MusicMapper

  • 接口
package com.example.onlinemusic.mapper;
​
import org.apache.ibatis.annotations.Mapper;
​
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: hold on
 * Date: 2022-07-28
 * Time: 23:27
 */
@Mapper
public interface MusicMapper {
    //上传音乐
​
    /**
     *
     * @param title 文件名去后缀得到音乐名
     * @param singer
     * @param time 通过SimpleDateFormat类获取到上传时间!
     * @param url 便于后面播放!
     * @param user_id 通过session获取
     * @return
     */
    int upload(String title,String singer,String time,String url,String user_id);
}
​
  • xml实现
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.onlinemusic.mapper.MusicMapper">
    <!--上传一条音乐信息到数据库-->
    <insert id="upload">
        insert into music (title,singer,time,url,user_id)
        values(#{title},#{singer},#{url},#{user_id})
    </insert>
</mapper>

SimpleDateFormat类和Date类获取系统时间并格式化

package com.example.onlinemusic.tools;
​
import java.text.SimpleDateFormat;
import java.util.Date;
​
/**
 * Created with IntelliJ IDEA.
 * Description:SimpleDateFormat格式化时间类学习!
 * User: hold on
 * Date: 2022-07-28
 * Time: 23:43
 */
public class GetTimeTest {
    public static void main(String[] args) {
        //我们可以通过 java.utilev包下的Date类获取到当前系统时间!
        Date currentTime = new Date();
        System.out.println(currentTime);
​
        //获取时间格式化类
        //年月日 y M d
        //时分秒 H m s
        //通过构造方法传入需要设置的时间格式
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //将当前时间设置成你需要的格式!
       String time = dateFormat.format(new Date());
        System.out.println(time);
    }
} 
  • new Date() 获取到当前系统时间

    SimpleDateFormat 类 对时间进行格式化处理

    yyyy-MM-dd HH:mm:ss //年-月-日 时:分:秒