wenj you hua
This commit is contained in:
@@ -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 &&
|
||||
|
||||
Reference in New Issue
Block a user