处理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,10 +167,12 @@ public class AppVersionServiceImpl extends DefaultBaseService implements IAppVer
Map<String, Object> params = getHashMap(4); Map<String, Object> params = getHashMap(4);
params.put("fileId", appVersionPO.getAppFile()); params.put("fileId", appVersionPO.getAppFile());
params.put("isOpen", false); params.put("isOpen", false);
fileService.downLoadFile(request, response, params, false); boolean isDownloadComplete = fileService.downLoadFile(request, response, params, false);
if(isDownloadComplete) {
LOG.debug("更新下载次数"); LOG.debug("更新下载次数");
appVersionDao.updateDownloadCount(appVersionPO.getAppVersionId()); appVersionDao.updateDownloadCount(appVersionPO.getAppVersionId());
} }
}
@Override @Override
public boolean canApiLock(String appVersionId, String appVersion) { public boolean canApiLock(String appVersionId, String appVersion) {

View File

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

View File

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

View File

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