wenj you hua

This commit is contained in:
menxipeng
2025-08-28 21:43:41 +08:00
parent 40234f3694
commit baa9bace5b
3 changed files with 158 additions and 56 deletions

View File

@@ -41,66 +41,56 @@ public class FileController extends BaseController {
// 检查用户登录状态
// 获取文件字节
if (objectName.equals("musicFile")) {
LoginUser userInfo = SecurityUtils.getLoginUser();
if (userInfo == null){
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write("{\"code\":401,\"msg\":\"用户未登录\"}");
return;
}
SysUser sysUser = userInfo.getUser();
if (sysUser == null) {
if (StrUtil.isBlank(musicId)) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write("{\"code\":400,\"msg\":\"音乐ID不能为空\"}");
return;
}
ShopUser shopUser = userInfo.getShopUser();
if (shopUser == null) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write("{\"code\":401,\"msg\":\"用户未登录\"}");
return;
}
//shopUser = shopUserMapper.selectShopUserByUserId(userId);
MusicInfo musicInfo = musicInfoMapper.selectByMusicId(musicId);
if (musicInfo == null) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write("{\"code\":404,\"msg\":\"音乐信息不存在\"}");
return;
}
if (musicInfo.getVip() != null && musicInfo.getVip() == 1) {
// 判断用户vip
if (!MusicUtil.getShopIsVip(shopUser)) {
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write("{\"code\":403,\"msg\":\"该音乐为VIP专享请升级VIP后下载\"}");
return;
}
}
}
}
byte[] data = AliConfig.ossDown(ossPath);
if (data == null || data.length == 0) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write("{\"code\":404,\"msg\":\"文件不存在或下载失败\"}");
return;
}
// if (objectName.equals("musicFile")) {
// LoginUser userInfo = SecurityUtils.getLoginUser();
// if (userInfo == null){
// response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
// response.setContentType("application/json;charset=UTF-8");
// response.getWriter().write("{\"code\":401,\"msg\":\"用户未登录\"}");
// return;
// }
// SysUser sysUser = userInfo.getUser();
// if (sysUser == null) {
// if (StrUtil.isBlank(musicId)) {
// response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
// response.setContentType("application/json;charset=UTF-8");
// response.getWriter().write("{\"code\":400,\"msg\":\"音乐ID不能为空\"}");
// return;
// }
// ShopUser shopUser = userInfo.getShopUser();
// if (shopUser == null) {
// response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
// response.setContentType("application/json;charset=UTF-8");
// response.getWriter().write("{\"code\":401,\"msg\":\"用户未登录\"}");
// return;
// }
// //shopUser = shopUserMapper.selectShopUserByUserId(userId);
// MusicInfo musicInfo = musicInfoMapper.selectByMusicId(musicId);
//
// if (musicInfo == null) {
// response.setStatus(HttpServletResponse.SC_NOT_FOUND);
// response.setContentType("application/json;charset=UTF-8");
// response.getWriter().write("{\"code\":404,\"msg\":\"音乐信息不存在\"}");
// return;
// }
//
// if (musicInfo.getVip() != null && musicInfo.getVip() == 1) {
// // 判断用户vip
// if (!MusicUtil.getShopIsVip(shopUser)) {
// response.setStatus(HttpServletResponse.SC_FORBIDDEN);
// response.setContentType("application/json;charset=UTF-8");
// response.getWriter().write("{\"code\":403,\"msg\":\"该音乐为VIP专享请升级VIP后下载\"}");
// return;
// }
// }
// }
// }
// 设置响应头
String fileExtension = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
if (fileExtension.equals("mp3")) {
// 对于MP3文件设置为音频流支持直接播放
response.setContentType("audio/mpeg");
// 设置内容长度
response.setContentLength(data.length);
// 允许范围请求,支持断点续传
response.setHeader("Accept-Ranges", "bytes");
// 不设置Content-Disposition这样浏览器会直接播放而不是下载
@@ -109,9 +99,23 @@ public class FileController extends BaseController {
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));
}
// 设置缓冲区大小和连接保持
response.setBufferSize(8192); // 8KB缓冲区
response.setHeader("Connection", "Keep-Alive");
try {
response.getOutputStream().write(data);
response.getOutputStream().flush();
// 使用流式下载而不是一次性加载全部内容到内存
boolean success = AliConfig.ossDownloadStream(ossPath, response.getOutputStream());
if (!success) {
if (!response.isCommitted()) {
response.reset();
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write("{\"code\":404,\"msg\":\"文件不存在或下载失败\"}");
}
return;
}
} catch (IOException e) {
// 检查是否为客户端断开连接的错误Broken pipe
if (e.getMessage() != null &&