处理app下载数量统计问题

This commit is contained in:
wanggeng 2021-11-15 16:00:02 +08:00
parent c85d2b9e7e
commit d5299065d3
7 changed files with 27 additions and 15 deletions

View File

@ -167,9 +167,11 @@ public class AppVersionServiceImpl extends DefaultBaseService implements IAppVer
Map<String, Object> params = getHashMap(4);
params.put("fileId", appVersionPO.getAppFile());
params.put("isOpen", false);
fileService.downLoadFile(request, response, params, false);
LOG.debug("更新下载次数");
appVersionDao.updateDownloadCount(appVersionPO.getAppVersionId());
boolean isDownloadComplete = fileService.downLoadFile(request, response, params, false);
if(isDownloadComplete) {
LOG.debug("更新下载次数");
appVersionDao.updateDownloadCount(appVersionPO.getAppVersionId());
}
}
@Override

View File

@ -102,7 +102,8 @@ public interface IDefaultFileService {
* @param filePO
* @param isOpen
* @param canRange
* @return 是否下载完成
*/
void downLoadFile(HttpServletRequest request, HttpServletResponse response, FilePO filePO, boolean isOpen, boolean canRange);
boolean downLoadFile(HttpServletRequest request, HttpServletResponse response, FilePO filePO, boolean isOpen, boolean canRange);
}

View File

@ -199,7 +199,7 @@ public interface IFileService {
* @param params
* @param canRange 开启断点续传
*/
void downLoadFile(HttpServletRequest request, HttpServletResponse response, Map<String, Object> params, boolean canRange);
boolean downLoadFile(HttpServletRequest request, HttpServletResponse response, Map<String, Object> params, boolean canRange);
/**
* 百度富文本编辑器

View File

@ -54,6 +54,6 @@ public interface IMinIoFileService {
* @param isOpen
* @param canRange
*/
void downLoadFile(HttpServletRequest request, HttpServletResponse response, FilePO filePO, boolean isOpen, boolean canRange);
boolean downLoadFile(HttpServletRequest request, HttpServletResponse response, FilePO filePO, boolean isOpen, boolean canRange);
}

View File

@ -282,7 +282,8 @@ public class DefaultFileServiceImpl extends DefaultBaseService implements IDefau
}
@Override
public void downLoadFile(HttpServletRequest request, HttpServletResponse response, FilePO filePO, boolean isOpen, boolean canRange) {
public boolean downLoadFile(HttpServletRequest request, HttpServletResponse response, FilePO filePO, boolean isOpen, boolean canRange) {
boolean isDownloadComplete = false;
try (
RandomAccessFile randomAccessFile = new RandomAccessFile(filePO.getFilePath(), "r");
FileChannel fileChannel = randomAccessFile.getChannel();
@ -303,7 +304,7 @@ public class DefaultFileServiceImpl extends DefaultBaseService implements IDefau
String ifModifiedSince = request.getHeader("If-Modified-Since");
if (StringUtils.isNotBlank(ifModifiedSince) && StringUtils.equalsIgnoreCase(ifModifiedSince, filePO.getGmtModified())) {
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
return;
return true;
}
// 缓存有效时间为7天
response.setHeader("Expires", DateTime.now().plusDays(7).toDateTime(DateTimeZone.forID("GMT")).toString());
@ -336,14 +337,18 @@ public class DefaultFileServiceImpl extends DefaultBaseService implements IDefau
long totalOutputLength = endRange - startRange + 1;
fileChannel.transferTo(startRange, totalOutputLength, writableByteChannel);
outputStream.flush();
if (endRange == contentLength - 1) {
isDownloadComplete = true;
}
} catch (Exception e) {
e.printStackTrace();
if (e instanceof ClientAbortException) {
LOG.debug("客户端断开连接");
} else {
throw new FileException("文件输出异常", e);
}
}
return isDownloadComplete;
}
/**

View File

@ -224,7 +224,7 @@ public class FileServiceImpl extends DefaultBaseService implements IFileService
}
@Override
public void downLoadFile(HttpServletRequest request, HttpServletResponse response, Map<String, Object> params, boolean canRange) {
public boolean downLoadFile(HttpServletRequest request, HttpServletResponse response, Map<String, Object> params, boolean canRange) {
FilePO filePO = fileDao.getPO(params);
if (null == filePO) {
throw new FileException("文件不存在");
@ -232,11 +232,10 @@ public class FileServiceImpl extends DefaultBaseService implements IFileService
boolean isOpen = Boolean.valueOf(params.get("isOpen").toString());
// 没有备份的数据从本地下载
if (filePO.getIsBack() == 0) {
defaultFileService.downLoadFile(request, response, filePO, isOpen, canRange);
return;
return defaultFileService.downLoadFile(request, response, filePO, isOpen, canRange);
}
if (fileProperties.getUseMinIo()) {
minIoFileService.downLoadFile(request, response, filePO, isOpen, canRange);
return minIoFileService.downLoadFile(request, response, filePO, isOpen, canRange);
}
throw new FileException("文件下载异常");
}

View File

@ -106,7 +106,8 @@ public class MinIoFileServiceImpl extends DefaultBaseService implements IMinIoFi
}
@Override
public void downLoadFile(HttpServletRequest request, HttpServletResponse response, FilePO filePO, boolean isOpen, boolean canRange) {
public boolean downLoadFile(HttpServletRequest request, HttpServletResponse response, FilePO filePO, boolean isOpen, boolean canRange) {
boolean isDownloadComplete = false;
// minIo中文件名
String objectName = filePO.getFileId() + "." + filePO.getFileType();
InputStream inputStream = null;
@ -126,7 +127,7 @@ public class MinIoFileServiceImpl extends DefaultBaseService implements IMinIoFi
String ifModifiedSince = request.getHeader("If-Modified-Since");
if (StringUtils.isNotBlank(ifModifiedSince) && StringUtils.equalsIgnoreCase(ifModifiedSince, filePO.getGmtModified())) {
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
return;
return true;
}
// 缓存有效时间为7天
response.setHeader("Expires", DateTime.now().plusDays(7).toDateTime(DateTimeZone.forID("GMT")).toString());
@ -156,6 +157,9 @@ public class MinIoFileServiceImpl extends DefaultBaseService implements IMinIoFi
} else {
inputStream = minioClient.getObject(filePO.getFileUrl(), objectName);
}
if (endRange == contentLength - 1) {
isDownloadComplete = true;
}
}
byte[] readBuf = new byte[IFileService.INPUT_STREAM_SIZE];
for (int length = 0; (length = inputStream.read(readBuf)) > 0; ) {
@ -174,6 +178,7 @@ public class MinIoFileServiceImpl extends DefaultBaseService implements IMinIoFi
}
}
}
return isDownloadComplete;
}