项目7-音乐播放器2(上传音乐+查询音乐+拦截器)

0.加入拦截器

之后就不用对用户是否登录进行判断了

0.1 定义拦截器

0.2 注册拦截器 

生效

1.上传音乐的接口设计

请求:
{
post,
/music/upload
{singer,MultipartFile file},
}
响应:
{
"status": 0,
"message": "上传成功!",
"data": true
}

Java如何判断一个文件是否为真实的MP3文件_判断一个文件是否是mp3 文件-CSDN博客

流程:前端进行相关的文件操作-再将上传的文件存入数据库 

1.1 后端代码

MAPPER

service

 

controller

package com.example.demo.controller;import com.example.demo.config.Result;
import com.example.demo.constatnts.Constant;
import com.example.demo.mapper.MusicMapper;
import com.example.demo.model.User;
import com.example.demo.service.MusicService;
import com.example.demo.utils.IsMp3;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpSession;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;@RestController
@RequestMapping("/music")
public class MusicController {@Autowiredprivate MusicService musicService;@RequestMapping("/upload")public Result uploadMusic(String singer, @RequestParam MultipartFile file, HttpSession httpSession)throws IOException{String fileNameFull=file.getOriginalFilename();String path = Constant.SAVE_PATH +fileNameFull;File dest=new File(path);if(!dest.exists()){//判断File对象描述的文件是否真实存在dest.mkdir();//创建File 对象代表的目录}else{return Result.fail(Constant.RESULT_CODE_FAIL,"你已经上传了该文件");}try {file.transferTo(dest);//上传文件到目标} catch (IOException e) {e.printStackTrace();}//判断是否为MP3格式if(!IsMp3.isMp3(dest)){Path deltePath = Paths.get(path);boolean result = Files.deleteIfExists(deltePath);if(result){return Result.fail(Constant.RESULT_CODE_FAIL,"上传的文件不是MP3,违规文件删除成功");}return Result.fail(Constant.RESULT_CODE_FAIL,"上传的文件不是MP3,违规文件删除失败");}//将获取的信息存入数据路//1.文件名字,存取的是.MP3之前的文件,左开右闭String musictitle=fileNameFull.substring(0,fileNameFull.lastIndexOf("."));//2.user_id,从session中获取Integer user_id=((User)httpSession.getAttribute(Constant.USERINFO_SESSION_KEY)).getUserId();Integer factor=musicService.insertMusic(musictitle,singer,path,user_id);if(factor<1){return Result.fail(Constant.RESULT_CODE_FAIL,"文件信息上传数据库失败");}return Result.success(true);}}

其中判断了所传文件是否为MP3文件 

1.2 后端测试 

1.当传送的文件不是mp3

2. 上传文件成功

 1.3 前端测试

form表单数据的提交与获取_form表单的提交以及数据获取-CSDN博客

1.form表单提交

2.ajax异步提交表单数据

js获取表单中input的文件,通过ajax发送给后台_获取表input信息js传给后台-CSDN博客 

前后端交互之使用ajax方法实现form表单的提交_ajax form-CSDN博客(重点)

Ajax向后台传入File类型参数 - EnjoyToday - 博客园 (cnblogs.com)(重点)

<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><meta name="viewport" content="width=device-width,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/><link rel="stylesheet" href="css/common.css">
</head>
<body>
<!--enctype="multipart/form-data"-->
<div><!-- 表单禁止提交 --><form id="form1" onsubmit="return false" action="##" enctype="multipart/form-data">文件上传:<input type="file" id="file" name="filename"/>歌手名: <label><input type="text" name="singer" id="singer" placeholder="请输入歌手名"/></label><input type="button" value="上传" id="submit" onclick="submitmessage()"/></form>
</div>
</body>
<script type="text/javascript" src="js/jquery-3.1.1.min.js"></script>    
<script>function submitmessage(){var formData = new FormData();formData.append('file', $('#file')[0].files[0]);formData.append('singer',$("#singer").val());$.ajax({type: "post",url: "/music/upload",processData: false,contentType: false,cache: false,data: formData,success: function(result){console.log(result);if(result!=null&&result.data==true&&result.status==200){alert("上传音乐成功");location.href="list.html"}else if(result!=null&&result.data!=null&&result.status==-8){alert("你已经上传了该文件");}else if(result!=null&&result.data!=null&&result.status==-3){alert("上传的文件不是MP3,违规文件删除成功");}else if(result!=null&&result.data!=null&&result.status==-5){alert("上传的文件不是MP3,违规文件删除失败");}else if(result!=null&&result.data!=null&&result.status==-6){alert("文件信息上传数据库失败");}else{alert("你上传的文件有误,请重新上传");}},//未登录的情况error: function(error){if(error!=null&&error.status==401){alert("请登录用户");location.href = "login.html";}else{location.href = "list.html";}}});}</script>
</html>

1.4 出现问题 

关于jQuery ajax 状态码status为0,一直返回error_jquery1102019932023357764328_1711959324301({"statu-CSDN博客

2.查询音乐模块设计

思路:

跳转过去是无参进行展示,此时页面展示的是所有音乐,当搜索框输入字符会显示特定的音乐

此处查询需要满足几个功能:
1. 支持模糊查询

2. 支持传入参数为空

请求:
{
get,
/music/findmusic,
data:{musicName:musicName},
}
响应:【不给musicName传参】
{
"status": 0,
"message": "查询到了歌曲的信息",
"data": [
{
"id": 19,
"title": "银河与星斗(女生版)",
"singer": "gaobo",
"url": "/music/get?path=银河与星斗(女生版)",
"time": "2022-03-28",
"userid": 3
},
{
"id": 20,
"title": "liu",
"singer": "qq",
"url": "/music/get?path=liu",
"time": "2022-03-28",
"userid": 3
}
]
}
响应:【给musicName传参】
{
"status": 0,
"message": "查询到了歌曲的信息",
"data": [
{
"id": 19,
"title": "银河与星斗(女生版)",
"singer": "lay",
"url": "/music/get?path=银河与星斗(女生版)",
"time": "2022-03-28",
"userid": 3
}
]
}

2.1 后端代码 

 

 2.2 后端测试

 2.4 前端页面测试

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/623542.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

访问者模式【行为模式C++】

1.概述 访问者模式是一种行为设计模式&#xff0c; 它能将算法与其所作用的对象隔离开来。 访问者模式主要解决的是数据与算法的耦合问题&#xff0c;尤其是在数据结构比较稳定&#xff0c;而算法多变的情况下。为了不污染数据本身&#xff0c;访问者会将多种算法独立归档&…

选择、插入、冒泡、计数、堆、归并、快速排序算法的Java代码汇总和GUI界面时间测试与讲解

运行效果&#xff1a; Video_2024-04-16_150519 文章目录 前言&#xff1a;排序算法在数据结构和算法中的重要性一、排序算法详解1.选择排序2.插入排序3.冒泡排序4.计数排序5.堆排序6.归并排序7.快速排序 二、实现一个可以计算时间的Java GUI排序应用程序 前言&#xff1a;排序…

【Linux】进程间通信——system V版本 共享内存

目录 共享内存 原理 实践 shmget() 创建共享内存 shmctl() 删除共享内存 shmat() 挂接进程和共享内存 shmt() 进程和共享内存去关联 共享内存的特性 优势 劣势 用共享内存实现进程间通信 共享内存 原理 两个进程的PCB各自维护着一个进程地址空间。当两个进…

ViM-UNet:用于生物医学细分的 Vision Mamba

ViM-UNet&#xff1a;用于生物医学细分的 Vision Mamba 摘要IntroductionMethod and Experiments结果与讨论 ViM-UNet: Vision Mamba for Biomedical Segmentation 摘要 卷积神经网络&#xff08;CNNs&#xff09;&#xff0c;尤其是UNet&#xff0c;是生物医学分割的默认架构…

Linux安装部署Tomcat

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ Linux安装部署Tomcat //将tomcat压缩包解压到对…

Innodb之redo日志

Innodb引擎执行流程 redo log ​ MySQL中的redo log&#xff08;重做日志&#xff09;是实现WAL&#xff08;预写式日志&#xff09;技术的关键组件&#xff0c;用于确保事务的持久性和数据库的crash-safe能力。借用《孔乙己》中酒店掌柜使用粉板记录赊账的故事&#xff0c;…

小程序视频下载器

下载高手&#xff0c;让小程序视频下载变得前所未有的简单&#xff01;专为非编程专业人士设计&#xff0c;该工具免去了繁琐的抓包软件学习过程&#xff0c;无需深入研究Fiddler或Charles的配置。它优化了视频、图片和音频资源的下载&#xff0c;提供直观的操作界面&#xff0…

拉普拉斯金字塔的频谱分析

1. 基本分析 拉普拉斯金字塔分解&#xff0c;主要由以下步骤组成&#xff1a; 对输入图像 L0 进行低通滤波&#xff0c;其中常采用高斯滤波&#xff1b;对低通滤波后的图像进行 1/2 倍率的下采样&#xff0c;这里的下采样通常是指直接取偶行且偶列&#xff08;以 0 开始计&am…

创建影子用户

文章目录 1.认识影子用户2.创建隐藏账户并加入管理员组3.修改注册表3.删除用户4.添加管理员权限 1.认识影子用户 影子用户通常指的是那些在系统用户列表中不可见&#xff0c;但在某些情况下可以进行操作的用户。在内网渗透过程中&#xff0c;当我们拿到shell时&#xff0c;肯定…

微博百度热搜收集

背景 大家都有使用微博、百度吧&#xff0c;而每天的热搜想必大家也用的不少。微博、百度的热搜有7、8种分类&#xff0c;每个单独查看比较耗费时间&#xff0c;效率极低&#xff0c;大概要花费3&#xff0c;4分钟左右。最近闲来无事&#xff0c;冒出个想法&#xff0c;是不是有…

rmallox勒索病毒#如何防范及处理?

rmallox勒索病毒介绍 rmallox将其特定的“.rmallox”扩展名添加到每个文件的名称中。例如&#xff0c;您命名为“my_dog.jpeg”的照片将被转换为“ my_dog.jpeg.rmallox”&#xff0c;在名为“ 资料.xlsx ”的Excel表格中报告——转换为“ 资料.xlsx.rmallox”&#xff0c;等等…

中医圆运动规律

目录 人体圆运动营气在十二经脉的运行规律子午流注与圆运动升降结合图 人体圆运动 营气在十二经脉的运行规律 营气在脉中&#xff0c;卫气在脉外 这个顺序也是子午流注的顺序 子午流注与圆运动升降结合图