|
@@ -143,7 +143,7 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
|
|
|
lqw.eq(StringUtils.isNotBlank(bo.getFileSuffix()), SysOss::getFileSuffix, bo.getFileSuffix());
|
|
lqw.eq(StringUtils.isNotBlank(bo.getFileSuffix()), SysOss::getFileSuffix, bo.getFileSuffix());
|
|
|
lqw.eq(StringUtils.isNotBlank(bo.getUrl()), SysOss::getUrl, bo.getUrl());
|
|
lqw.eq(StringUtils.isNotBlank(bo.getUrl()), SysOss::getUrl, bo.getUrl());
|
|
|
lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null,
|
|
lqw.between(params.get("beginCreateTime") != null && params.get("endCreateTime") != null,
|
|
|
- SysOss::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime"));
|
|
|
|
|
|
|
+ SysOss::getCreateTime, params.get("beginCreateTime"), params.get("endCreateTime"));
|
|
|
lqw.eq(ObjectUtil.isNotNull(bo.getCreateBy()), SysOss::getCreateBy, bo.getCreateBy());
|
|
lqw.eq(ObjectUtil.isNotNull(bo.getCreateBy()), SysOss::getCreateBy, bo.getCreateBy());
|
|
|
lqw.eq(StringUtils.isNotBlank(bo.getService()), SysOss::getService, bo.getService());
|
|
lqw.eq(StringUtils.isNotBlank(bo.getService()), SysOss::getService, bo.getService());
|
|
|
lqw.orderByAsc(SysOss::getOssId);
|
|
lqw.orderByAsc(SysOss::getOssId);
|
|
@@ -162,7 +162,6 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
|
|
|
return baseMapper.selectVoById(ossId);
|
|
return baseMapper.selectVoById(ossId);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
/**
|
|
/**
|
|
|
* 文件下载方法,支持一次性下载完整文件
|
|
* 文件下载方法,支持一次性下载完整文件
|
|
|
*
|
|
*
|
|
@@ -191,7 +190,8 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
|
|
|
@Override
|
|
@Override
|
|
|
public SysOssVo upload(MultipartFile file) {
|
|
public SysOssVo upload(MultipartFile file) {
|
|
|
String originalfileName = file.getOriginalFilename();
|
|
String originalfileName = file.getOriginalFilename();
|
|
|
- String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
|
|
|
|
|
|
|
+ String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."),
|
|
|
|
|
+ originalfileName.length());
|
|
|
OssClient storage = OssFactory.instance();
|
|
OssClient storage = OssFactory.instance();
|
|
|
UploadResult uploadResult;
|
|
UploadResult uploadResult;
|
|
|
try {
|
|
try {
|
|
@@ -212,7 +212,8 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
|
|
|
@Override
|
|
@Override
|
|
|
public SysOssVo upload(File file) {
|
|
public SysOssVo upload(File file) {
|
|
|
String originalfileName = file.getName();
|
|
String originalfileName = file.getName();
|
|
|
- String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."), originalfileName.length());
|
|
|
|
|
|
|
+ String suffix = StringUtils.substring(originalfileName, originalfileName.lastIndexOf("."),
|
|
|
|
|
+ originalfileName.length());
|
|
|
OssClient storage = OssFactory.instance();
|
|
OssClient storage = OssFactory.instance();
|
|
|
UploadResult uploadResult = storage.uploadSuffix(file, suffix);
|
|
UploadResult uploadResult = storage.uploadSuffix(file, suffix);
|
|
|
// 保存文件信息
|
|
// 保存文件信息
|
|
@@ -220,7 +221,8 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@NotNull
|
|
@NotNull
|
|
|
- private SysOssVo buildResultEntity(String originalfileName, String suffix, String configKey, UploadResult uploadResult) {
|
|
|
|
|
|
|
+ private SysOssVo buildResultEntity(String originalfileName, String suffix, String configKey,
|
|
|
|
|
+ UploadResult uploadResult) {
|
|
|
SysOss oss = new SysOss();
|
|
SysOss oss = new SysOss();
|
|
|
oss.setUrl(uploadResult.getUrl());
|
|
oss.setUrl(uploadResult.getUrl());
|
|
|
oss.setFileSuffix(suffix);
|
|
oss.setFileSuffix(suffix);
|
|
@@ -266,4 +268,67 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
|
|
|
}
|
|
}
|
|
|
return oss;
|
|
return oss;
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 检查文件访问权限
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param ossId 文件ID
|
|
|
|
|
+ * @return 是否有权限访问
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public boolean checkFileAccessPermission(Long ossId) {
|
|
|
|
|
+ // 基础权限检查:文件必须存在
|
|
|
|
|
+ SysOssVo oss = getById(ossId);
|
|
|
|
|
+ if (ObjectUtil.isNull(oss)) {
|
|
|
|
|
+ return false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // TODO: 这里可以根据业务需求实现更复杂的权限检查逻辑
|
|
|
|
|
+ // 例如:检查用户是否有权限访问该文件、检查文件所属部门等
|
|
|
|
|
+ // 目前暂时返回true,表示所有登录用户都可以访问
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 记录文件访问日志
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param ossId 文件ID
|
|
|
|
|
+ * @param userId 用户ID
|
|
|
|
|
+ * @param accessType 访问类型
|
|
|
|
|
+ * @param ipAddress IP地址
|
|
|
|
|
+ * @param userAgent 用户代理
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public void logFileAccess(Long ossId, Long userId, String accessType, String ipAddress, String userAgent) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ // TODO: 这里可以调用文件访问日志服务记录访问信息
|
|
|
|
|
+ // 目前暂时只打印日志,后续可以完善为数据库记录
|
|
|
|
|
+ // log.info("文件访问日志 - 文件ID: {}, 用户ID: {}, 访问类型: {}, IP: {}, UserAgent: {}",
|
|
|
|
|
+ // ossId, userId, accessType, ipAddress, userAgent);
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ // log.warn("记录文件访问日志失败: {}", e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 获取文件临时访问URL(带权限检查)
|
|
|
|
|
+ *
|
|
|
|
|
+ * @param ossId 文件ID
|
|
|
|
|
+ * @param expireSeconds 过期时间(秒)
|
|
|
|
|
+ * @return 临时访问URL
|
|
|
|
|
+ */
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public String getFileAccessUrl(Long ossId, Integer expireSeconds) {
|
|
|
|
|
+ SysOssVo oss = getById(ossId);
|
|
|
|
|
+ if (ObjectUtil.isNull(oss)) {
|
|
|
|
|
+ throw new ServiceException("文件不存在");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!checkFileAccessPermission(ossId)) {
|
|
|
|
|
+ throw new ServiceException("无权限访问该文件");
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ OssClient storage = OssFactory.instance(oss.getService());
|
|
|
|
|
+ return storage.getPrivateUrl(oss.getFileName(), Duration.ofSeconds(expireSeconds));
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|