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