Commit add6d0eb22f2d53a124185ae36a686b230936230
1 parent
2ad1001e
去掉多余注释
Showing
1 changed file
with
0 additions
and
175 deletions
src/main/java/top/panll/assist/controller/DownloadController.java deleted
100644 → 0
| 1 | -//package top.panll.assist.controller; | ||
| 2 | -// | ||
| 3 | -// | ||
| 4 | -//import io.swagger.v3.oas.annotations.Operation; | ||
| 5 | -//import io.swagger.v3.oas.annotations.Parameter; | ||
| 6 | -//import io.swagger.v3.oas.annotations.tags.Tag; | ||
| 7 | -//import org.apache.catalina.connector.ClientAbortException; | ||
| 8 | -//import org.slf4j.Logger; | ||
| 9 | -//import org.slf4j.LoggerFactory; | ||
| 10 | -//import org.springframework.beans.factory.annotation.Autowired; | ||
| 11 | -//import org.springframework.stereotype.Controller; | ||
| 12 | -//import org.springframework.web.bind.annotation.*; | ||
| 13 | -//import top.panll.assist.dto.UserSettings; | ||
| 14 | -//import top.panll.assist.utils.PageInfo; | ||
| 15 | -// | ||
| 16 | -//import javax.servlet.http.HttpServletRequest; | ||
| 17 | -//import javax.servlet.http.HttpServletResponse; | ||
| 18 | -//import java.io.BufferedOutputStream; | ||
| 19 | -//import java.io.File; | ||
| 20 | -//import java.io.IOException; | ||
| 21 | -//import java.io.RandomAccessFile; | ||
| 22 | -//import java.nio.charset.StandardCharsets; | ||
| 23 | -//import java.util.List; | ||
| 24 | -//import java.util.Map; | ||
| 25 | -// | ||
| 26 | -//@Controller | ||
| 27 | -//@RequestMapping("/download") | ||
| 28 | -//public class DownloadController { | ||
| 29 | -// | ||
| 30 | -// private final static Logger logger = LoggerFactory.getLogger(DownloadController.class); | ||
| 31 | -// | ||
| 32 | -// @Autowired | ||
| 33 | -// private UserSettings userSettings; | ||
| 34 | -// | ||
| 35 | -// /** | ||
| 36 | -// * 获取app+stream列表 | ||
| 37 | -// * | ||
| 38 | -// * @return | ||
| 39 | -// */ | ||
| 40 | -// @GetMapping(value = "/**") | ||
| 41 | -// @ResponseBody | ||
| 42 | -// public void download(HttpServletRequest request, HttpServletResponse response) { | ||
| 43 | -// | ||
| 44 | -// String resourcePath = request.getServletPath(); | ||
| 45 | -// System.out.println(resourcePath); | ||
| 46 | -// resourcePath = resourcePath.substring("/download".length() + 1, resourcePath.length()); | ||
| 47 | -// String record = userSettings.getRecord(); | ||
| 48 | -//// if (record.endsWith("/")) { | ||
| 49 | -//// record = record.substring(0, record.length() - 1); | ||
| 50 | -//// System.out.println(record); | ||
| 51 | -//// } | ||
| 52 | -// System.out.println(record + resourcePath); | ||
| 53 | -// File file = new File(record + resourcePath); | ||
| 54 | -// if (!file.exists()) { | ||
| 55 | -// response.setStatus(HttpServletResponse.SC_NOT_FOUND); | ||
| 56 | -// return; | ||
| 57 | -// } | ||
| 58 | -// | ||
| 59 | -// /** | ||
| 60 | -// * 参考实现来自: CSDN 进修的CODER SpringBoot Java实现Http方式分片下载断点续传+实现H5大视频渐进式播放 | ||
| 61 | -// * https://blog.csdn.net/lovequanquqn/article/details/104562945 | ||
| 62 | -// */ | ||
| 63 | -// String range = request.getHeader("Range"); | ||
| 64 | -// logger.info("current request rang:" + range); | ||
| 65 | -// //开始下载位置 | ||
| 66 | -// long startByte = 0; | ||
| 67 | -// //结束下载位置 | ||
| 68 | -// long endByte = file.length() - 1; | ||
| 69 | -// logger.info("文件开始位置:{},文件结束位置:{},文件总长度:{}", startByte, endByte, file.length()); | ||
| 70 | -// | ||
| 71 | -// //有range的话 | ||
| 72 | -// if (range != null && range.contains("bytes=") && range.contains("-")) { | ||
| 73 | -// range = range.substring(range.lastIndexOf("=") + 1).trim(); | ||
| 74 | -// String[] ranges = range.split("-"); | ||
| 75 | -// try { | ||
| 76 | -// //判断range的类型 | ||
| 77 | -// if (ranges.length == 1) { | ||
| 78 | -// // 类型一:bytes=-2343, | ||
| 79 | -// if (range.startsWith("-")) { | ||
| 80 | -// endByte = Long.parseLong(ranges[0]); | ||
| 81 | -// } | ||
| 82 | -// //类型二:bytes=2343- | ||
| 83 | -// else if (range.endsWith("-")) { | ||
| 84 | -// startByte = Long.parseLong(ranges[0]); | ||
| 85 | -// } | ||
| 86 | -// } | ||
| 87 | -// //类型三:bytes=22-2343 | ||
| 88 | -// else if (ranges.length == 2) { | ||
| 89 | -// startByte = Long.parseLong(ranges[0]); | ||
| 90 | -// endByte = Long.parseLong(ranges[1]); | ||
| 91 | -// } | ||
| 92 | -// | ||
| 93 | -// } catch (NumberFormatException e) { | ||
| 94 | -// startByte = 0; | ||
| 95 | -// endByte = file.length() - 1; | ||
| 96 | -// logger.error("Range Occur Error,Message:{}", e.getLocalizedMessage()); | ||
| 97 | -// } | ||
| 98 | -// | ||
| 99 | -// | ||
| 100 | -// } | ||
| 101 | -// | ||
| 102 | -// // 要下载的长度 | ||
| 103 | -// long contentLength = endByte - startByte + 1; | ||
| 104 | -// // 文件名 | ||
| 105 | -// String fileName = file.getName(); | ||
| 106 | -// // 文件类型 | ||
| 107 | -// String contentType = request.getServletContext().getMimeType(fileName); | ||
| 108 | -// | ||
| 109 | -// // 解决下载文件时文件名乱码问题 | ||
| 110 | -// byte[] fileNameBytes = fileName.getBytes(StandardCharsets.UTF_8); | ||
| 111 | -// fileName = new String(fileNameBytes, 0, fileNameBytes.length, StandardCharsets.ISO_8859_1); | ||
| 112 | -// | ||
| 113 | -// response.setHeader("Content-Type", contentType); | ||
| 114 | -// response.setHeader("Content-Length", String.valueOf(contentLength)); | ||
| 115 | -// //inline表示浏览器直接使用,attachment表示下载,fileName表示下载的文件名 | ||
| 116 | -// response.setHeader("Content-Disposition", "inline;filename=" + fileName); | ||
| 117 | -// response.setContentType(contentType); | ||
| 118 | -// if (range != null) { | ||
| 119 | -// //各种响应头设置 | ||
| 120 | -// //支持断点续传,获取部分字节内容: | ||
| 121 | -// response.setHeader("Accept-Ranges", "bytes"); | ||
| 122 | -// //http状态码要为206:表示获取部分内容 | ||
| 123 | -// response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT); | ||
| 124 | -// // Content-Range,格式为:[要下载的开始位置]-[结束位置]/[文件总大小] | ||
| 125 | -// response.setHeader("Content-Range", "bytes " + startByte + "-" + endByte + "/" + file.length()); | ||
| 126 | -// } else { | ||
| 127 | -// response.setStatus(HttpServletResponse.SC_OK); | ||
| 128 | -// } | ||
| 129 | -// | ||
| 130 | -// | ||
| 131 | -// BufferedOutputStream outputStream = null; | ||
| 132 | -// RandomAccessFile randomAccessFile = null; | ||
| 133 | -// //已传送数据大小 | ||
| 134 | -// long transmitted = 0; | ||
| 135 | -// try { | ||
| 136 | -// randomAccessFile = new RandomAccessFile(file, "r"); | ||
| 137 | -// | ||
| 138 | -// outputStream = new BufferedOutputStream(response.getOutputStream()); | ||
| 139 | -// byte[] buff = new byte[4096]; | ||
| 140 | -// int len = 0; | ||
| 141 | -// randomAccessFile.seek(startByte); | ||
| 142 | -// //warning:判断是否到了最后不足4096(buff的length)个byte这个逻辑((transmitted + len) <= contentLength)要放前面 | ||
| 143 | -// //不然会会先读取randomAccessFile,造成后面读取位置出错; | ||
| 144 | -// while ((transmitted + len) <= contentLength && (len = randomAccessFile.read(buff)) != -1) { | ||
| 145 | -// outputStream.write(buff, 0, len); | ||
| 146 | -// transmitted += len; | ||
| 147 | -// } | ||
| 148 | -// //处理不足buff.length部分 | ||
| 149 | -// if (transmitted < contentLength) { | ||
| 150 | -// len = randomAccessFile.read(buff, 0, (int) (contentLength - transmitted)); | ||
| 151 | -// outputStream.write(buff, 0, len); | ||
| 152 | -// transmitted += len; | ||
| 153 | -// } | ||
| 154 | -// | ||
| 155 | -// outputStream.flush(); | ||
| 156 | -// response.flushBuffer(); | ||
| 157 | -// randomAccessFile.close(); | ||
| 158 | -// logger.info("下载完毕:" + startByte + "-" + endByte + ":" + transmitted); | ||
| 159 | -// } catch (ClientAbortException e) { | ||
| 160 | -// logger.warn("用户停止下载:" + startByte + "-" + endByte + ":" + transmitted); | ||
| 161 | -// //捕获此异常表示拥护停止下载 | ||
| 162 | -// } catch (IOException e) { | ||
| 163 | -// e.printStackTrace(); | ||
| 164 | -// logger.error("用户下载IO异常,Message:{}", e.getLocalizedMessage()); | ||
| 165 | -// } finally { | ||
| 166 | -// try { | ||
| 167 | -// if (randomAccessFile != null) { | ||
| 168 | -// randomAccessFile.close(); | ||
| 169 | -// } | ||
| 170 | -// } catch (IOException e) { | ||
| 171 | -// e.printStackTrace(); | ||
| 172 | -// } | ||
| 173 | -// }///end try | ||
| 174 | -// } | ||
| 175 | -//} |