From 67b8c376b8322f502d8f7fb0fc184c80ca080a82 Mon Sep 17 00:00:00 2001 From: MAC <1162714483@qq.com> Date: Thu, 31 Mar 2022 23:14:17 +0800 Subject: [PATCH 1/2] =?UTF-8?q?perf(=E9=A2=84=E8=A7=88):=20=E8=A7=86?= =?UTF-8?q?=E9=A2=91=E9=A2=84=E8=A7=88=E4=BC=98=E5=8C=96=EF=BC=8C=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=88=86=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/FiletransferController.java | 56 ++++++++++++++----- 1 file changed, 42 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/qiwenshare/file/controller/FiletransferController.java b/src/main/java/com/qiwenshare/file/controller/FiletransferController.java index 41cb74d..6178393 100644 --- a/src/main/java/com/qiwenshare/file/controller/FiletransferController.java +++ b/src/main/java/com/qiwenshare/file/controller/FiletransferController.java @@ -25,6 +25,8 @@ import com.qiwenshare.ufop.util.UFOPUtils; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; + +import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.web.bind.annotation.*; @@ -36,6 +38,7 @@ import javax.servlet.http.HttpServletResponse; import java.awt.image.BufferedImage; import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.io.UnsupportedEncodingException; import java.util.List; @@ -146,7 +149,7 @@ public class FiletransferController { @Operation(summary="预览文件", description="用于文件预览", tags = {"filetransfer"}) @GetMapping("/preview") - public void preview(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, PreviewDTO previewDTO){ + public void preview(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, PreviewDTO previewDTO) throws IOException { if (previewDTO.getPlatform() != null && previewDTO.getPlatform() == 2) { filetransferService.previewPictureFile(httpServletResponse, previewDTO); @@ -176,18 +179,6 @@ public class FiletransferController { return; } - FileBean fileBean = fileService.getById(userFile.getFileId()); - - String mime= MimeUtils.getMime(userFile.getExtendName()); - httpServletResponse.setHeader("Content-Type", mime); - String rangeString = httpServletRequest.getHeader("Range");//如果是video标签发起的请求就不会为null - if (StringUtils.isNotEmpty(rangeString)) { - long range = Long.valueOf(rangeString.substring(rangeString.indexOf("=") + 1, rangeString.indexOf("-"))); - httpServletResponse.setContentLength(Math.toIntExact(fileBean.getFileSize())); - httpServletResponse.setHeader("Content-Range", String.valueOf(range + (Math.toIntExact(fileBean.getFileSize()) - 1))); - } - httpServletResponse.setHeader("Accept-Ranges", "bytes"); - String fileName = userFile.getFileName() + "." + userFile.getExtendName(); try { fileName = new String(fileName.getBytes("utf-8"), "ISO-8859-1"); @@ -197,7 +188,44 @@ public class FiletransferController { httpServletResponse.addHeader("Content-Disposition", "fileName=" + fileName);// 设置文件名 - filetransferService.previewFile(httpServletResponse, previewDTO); + FileBean fileBean = fileService.getById(userFile.getFileId()); + if (UFOPUtils.isVideoFile(userFile.getExtendName()) && !"true".equals(previewDTO.getIsMin())) { + Downloader downloader = ufopFactory.getDownloader(fileBean.getStorageType()); + DownloadFile downloadFile = new DownloadFile(); + downloadFile.setFileUrl(fileBean.getFileUrl()); + InputStream inputStream = downloader.getInputStream(downloadFile); + + + String mime = MimeUtils.getMime(userFile.getExtendName()); + httpServletResponse.setHeader("Content-Type", mime); + + //获取从那个字节开始读取文件 + String rangeString = httpServletRequest.getHeader("Range"); + int range = 0; + if (StringUtils.isNotBlank(rangeString)) { + range = Integer.valueOf(rangeString.substring(rangeString.indexOf("=") + 1, rangeString.indexOf("-"))); + } + //获取响应的输出流 + OutputStream outputStream = httpServletResponse.getOutputStream(); + //返回码需要为206,代表只处理了部分请求,响应了部分数据 + httpServletResponse.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT); + // 每次请求只返回1MB的视频流 + byte[] bytes = new byte[1024 * 1024]; + System.out.println("文件长度:" + inputStream.available()); + System.out.println("range:" + range); + inputStream.skip(range); + int len = IOUtils.read(inputStream, bytes); + //设置此次相应返回的数据长度 + httpServletResponse.setContentLength(len); + httpServletResponse.setHeader("Accept-Ranges", "bytes"); + //设置此次相应返回的数据范围 + httpServletResponse.setHeader("Content-Range", "bytes " + range + "-" + (fileBean.getFileSize() - 1) + "/" + fileBean.getFileSize()); + // 将这1MB的视频流响应给客户端 + outputStream.write(bytes, 0, len); + outputStream.close(); + } else { + filetransferService.previewFile(httpServletResponse, previewDTO); + } } From 92dd487c6cf2ac2d7c137e09f3afc809e31dd263 Mon Sep 17 00:00:00 2001 From: MAC <1162714483@qq.com> Date: Thu, 31 Mar 2022 23:30:10 +0800 Subject: [PATCH 2/2] =?UTF-8?q?perf(=E9=A2=84=E8=A7=88):=20=E8=A7=86?= =?UTF-8?q?=E9=A2=91=E9=A2=84=E8=A7=88=E4=BC=98=E5=8C=96=EF=BC=8C=E5=88=86?= =?UTF-8?q?=E6=AE=B5=E5=A4=A7=E5=B0=8F=E8=AE=BE=E7=BD=AE5M?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/qiwenshare/file/controller/FiletransferController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/qiwenshare/file/controller/FiletransferController.java b/src/main/java/com/qiwenshare/file/controller/FiletransferController.java index 6178393..fec29e3 100644 --- a/src/main/java/com/qiwenshare/file/controller/FiletransferController.java +++ b/src/main/java/com/qiwenshare/file/controller/FiletransferController.java @@ -210,7 +210,7 @@ public class FiletransferController { //返回码需要为206,代表只处理了部分请求,响应了部分数据 httpServletResponse.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT); // 每次请求只返回1MB的视频流 - byte[] bytes = new byte[1024 * 1024]; + byte[] bytes = new byte[1024 * 1024 * 5]; System.out.println("文件长度:" + inputStream.available()); System.out.println("range:" + range); inputStream.skip(range);