From 2cc11f5e67d9a168e6ba4cf26d4942e49847c670 Mon Sep 17 00:00:00 2001 From: WenG <450292408@qq.com> Date: Sat, 5 Mar 2022 09:56:49 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9C=80=E4=BF=AE=E6=94=B9=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=85=88=E4=B8=8B=E8=BD=BD=E9=97=AE=E9=A2=98=E5=92=8CApk?= =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/AppVersionServiceImpl.java | 2 +- .../service/impl/MinIoFileServiceImpl.java | 63 +++++++++---------- 2 files changed, 32 insertions(+), 33 deletions(-) diff --git a/login-app/src/main/java/ink/wgink/login/app/service/appversion/impl/AppVersionServiceImpl.java b/login-app/src/main/java/ink/wgink/login/app/service/appversion/impl/AppVersionServiceImpl.java index 2b9f871c..18f18465 100644 --- a/login-app/src/main/java/ink/wgink/login/app/service/appversion/impl/AppVersionServiceImpl.java +++ b/login-app/src/main/java/ink/wgink/login/app/service/appversion/impl/AppVersionServiceImpl.java @@ -167,7 +167,7 @@ public class AppVersionServiceImpl extends DefaultBaseService implements IAppVer Map params = getHashMap(4); params.put("fileId", appVersionPO.getAppFile()); params.put("isOpen", false); - boolean isDownloadComplete = fileService.downLoadFile(request, response, params, false); + boolean isDownloadComplete = fileService.downLoadFile(request, response, params, true); if(isDownloadComplete) { LOG.debug("更新下载次数"); appVersionDao.updateDownloadCount(appVersionPO.getAppVersionId()); diff --git a/module-file/src/main/java/ink/wgink/module/file/service/impl/MinIoFileServiceImpl.java b/module-file/src/main/java/ink/wgink/module/file/service/impl/MinIoFileServiceImpl.java index dff9ef50..d25677dc 100644 --- a/module-file/src/main/java/ink/wgink/module/file/service/impl/MinIoFileServiceImpl.java +++ b/module-file/src/main/java/ink/wgink/module/file/service/impl/MinIoFileServiceImpl.java @@ -178,8 +178,6 @@ public class MinIoFileServiceImpl extends DefaultBaseService implements IMinIoFi if (!isOpen) { // 下载 response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(filePO.getFileName(), "UTF-8")); - GetObjectArgs getObjectArgs = GetObjectArgs.builder().bucket(filePO.getFileUrl()).object(objectName).build(); - inputStream = minioClient.getObject(getObjectArgs); } else { // 直接打开 response.setHeader("Content-Disposition", "inline;fileName=" + URLEncoder.encode(filePO.getFileName(), "UTF-8")); @@ -197,37 +195,37 @@ public class MinIoFileServiceImpl extends DefaultBaseService implements IMinIoFi response.setHeader("max-age", "3600"); response.setHeader("Last-Modified", filePO.getGmtModified()); } - String rangeString = null; - if (canRange && request != null) { - rangeString = request.getHeader("Range"); - LOG.debug("range: {}", rangeString); + } + String rangeString = null; + if (canRange && request != null) { + rangeString = request.getHeader("Range"); + LOG.debug("range: {}", rangeString); + } + long contentLength = Long.valueOf(filePO.getFileSize()); + long startRange = 0; + long endRange = contentLength - 1; + LOG.debug("1.startRange: {}, endRange: {}", startRange, endRange); + if (!StringUtils.isBlank(rangeString)) { + response.setContentType("multipart/byteranges"); + String[] rangeArray = rangeString.substring(rangeString.indexOf("=") + 1).split("-"); + startRange = Long.valueOf(rangeArray[0]); + if (rangeArray.length > 1) { + LOG.debug("2.startRange: {}, endRange: {}", startRange, endRange); + endRange = Long.valueOf(rangeArray[1]); } - long contentLength = Long.valueOf(filePO.getFileSize()); - long startRange = 0; - long endRange = contentLength - 1; - LOG.debug("1.startRange: {}, endRange: {}", startRange, endRange); - if (!StringUtils.isBlank(rangeString)) { - response.setContentType("multipart/byteranges"); - String[] rangeArray = rangeString.substring(rangeString.indexOf("=") + 1).split("-"); - startRange = Long.valueOf(rangeArray[0]); - if (rangeArray.length > 1) { - LOG.debug("2.startRange: {}, endRange: {}", startRange, endRange); - endRange = Long.valueOf(rangeArray[1]); - } - setRangeHeader(startRange, endRange, response, filePO.getFileId(), contentLength); - long rangeLength = endRange - startRange + 1; - if (rangeLength <= 0) { - // 标记为已完成 - return true; - } - LOG.debug("rangeLength: {}", rangeLength); - inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(filePO.getFileUrl()).object(objectName).offset(startRange).length(rangeLength + 1).build()); - } else { - inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(filePO.getFileUrl()).object(objectName).build()); - } - if (endRange == contentLength) { - isDownloadComplete = true; + setRangeHeader(startRange, endRange, response, filePO.getFileId(), contentLength); + long rangeLength = endRange - startRange + 1; + if (rangeLength <= 0) { + // 标记为已完成 + return true; } + LOG.debug("rangeLength: {}", rangeLength); + inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(filePO.getFileUrl()).object(objectName).offset(startRange).length(rangeLength).build()); + } else { + inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(filePO.getFileUrl()).object(objectName).offset(0L).length(contentLength).build()); + } + if (endRange == contentLength) { + isDownloadComplete = true; } byte[] readBuf = new byte[IFileService.INPUT_STREAM_SIZE]; for (int length = 0; (length = inputStream.read(readBuf)) > 0; ) { @@ -235,7 +233,8 @@ public class MinIoFileServiceImpl extends DefaultBaseService implements IMinIoFi } outputStream.flush(); inputStream.close(); - } catch (ServerException | IOException | ErrorResponseException | InsufficientDataException | InternalException | InvalidKeyException | InvalidResponseException | NoSuchAlgorithmException | XmlParserException e) { + } catch (ServerException | IOException | ErrorResponseException | InsufficientDataException | InternalException | InvalidKeyException | InvalidResponseException | NoSuchAlgorithmException | + XmlParserException e) { throw new FileException("文件输出异常", e); } finally { if (inputStream != null) {