处理app下载数量统计问题
This commit is contained in:
parent
c85d2b9e7e
commit
d5299065d3
@ -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
|
||||
|
@ -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);
|
||||
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
/**
|
||||
* 百度富文本编辑器
|
||||
|
@ -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);
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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("文件下载异常");
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user