添加直播推流工具下载

This commit is contained in:
sh
2026-06-24 13:23:56 +08:00
parent 6e27560077
commit 525e2a55a8

View File

@@ -0,0 +1,75 @@
package com.ruoyi.cms.controller.cms;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.ruoyi.common.core.domain.AjaxResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
@RestController
@RequestMapping("/cms/liveSteam")
@Api(tags = "后台:直播")
public class CmsLiveSteamingController {
@ApiOperation("下载推流工具")
@PreAuthorize("@ss.hasPermi('cms:liveSteam:downloadTools')")
@GetMapping("/downloadTools")
public void downloadTools(HttpServletRequest request, HttpServletResponse response)throws Exception {
ObjectMapper mapper = new ObjectMapper();
String name = "app.zip";
String pathFile = "/data/downloadmodel/" + name;
File url = new File(pathFile);
try {
request.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
// 文件不存在直接返回JSON不走二进制下载逻辑
if (!url.exists()) {
try {
response.setContentType("application/json;charset=UTF-8");
mapper.writeValue(response.getWriter(), AjaxResult.error("文件未找到:" + name));
} catch (IOException e) {
e.printStackTrace();
}
return;
}
// 文件名编码
String encodeName = URLEncoder.encode(name, StandardCharsets.UTF_8.name());
response.reset();
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=" + encodeName);
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "max-age=0");
// 大文件缓冲区4k
byte[] buffer = new byte[8192]; // 加大缓冲区,加快传输
try (InputStream in = new FileInputStream(url)) {
OutputStream out = response.getOutputStream();
int len;
try {
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
out.flush();
} catch (IOException e) {
System.out.println("下载中断:客户端主动断开连接,文件:" + name);
return;
}
} catch (IOException e) {
System.out.println("文件读取异常:" + e.getMessage());
}
}
}