Skip to content

Commit

Permalink
Merge pull request #214 from jamebal/develop
Browse files Browse the repository at this point in the history
fix: 修复挂载文件无法通过位置跳转的问题
  • Loading branch information
jamebal authored Dec 31, 2024
2 parents d02b890 + 8b807da commit 6016469
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -283,4 +283,11 @@ public ResponseResult<Object> getFileById(HttpServletRequest request, @RequestPa
return ResultUtil.success(fileService.getById(fileId));
}

@Operation(summary = "挂用户获取分享文件信息")
@GetMapping("/mount/file_info")
@LogOperatingFun(logType = LogOperation.Type.BROWSE)
public ResponseResult<Map<String, String>> getMountFileInfo(@RequestParam String fileId, @RequestParam String fileUsername) {
return ResultUtil.success(shareService.getMountFileInfo(fileId, fileUsername));
}

}
9 changes: 9 additions & 0 deletions src/main/java/com/jmal/clouddisk/service/IShareService.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.jmal.clouddisk.util.ResponseResult;

import java.util.List;
import java.util.Map;

/**
* @Description IShareService
Expand Down Expand Up @@ -117,4 +118,12 @@ public interface IShareService {
* @return ResponseResult
*/
ResponseResult<Object> generateShareToken(String fileId);

/**
* 获取挂载文件信息
* @param fileId fileId
* @param fileUsername fileUsername
* @return ResponseResult
*/
Map<String, String> getMountFileInfo(String fileId, String fileUsername);
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,10 @@
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import static com.jmal.clouddisk.controller.rest.ShareController.SHARE_EXPIRED;
import static com.jmal.clouddisk.webdav.MyWebdavServlet.PATH_DELIMITER;

/**
* @Description 分享
Expand Down Expand Up @@ -118,6 +120,7 @@ private void setShortId(ShareDO share, ShareDO shareDO) {

/**
* 生成5-8位短链接字符串
*
* @return 链接字符串
*/
private String generateShortId(ShareDO share) {
Expand Down Expand Up @@ -294,14 +297,45 @@ public ResponseResult<Object> generateShareToken(String fileId) {
return ResultUtil.warning("分享不存在或不是私密分享");
}
if (!fileDocument.getUserId().equals(userLoginHolder.getUserId()) && !existsMountFile(shareDO.getFileId(), userLoginHolder.getUserId())) {
return ResultUtil.error(ExceptionType.PERMISSION_DENIED);
}
return ResultUtil.error(ExceptionType.PERMISSION_DENIED);
}

// 生成share-token, share-token有效期等于分享有效期
String shareToken = TokenUtil.createToken(shareDO.getId(), shareDO.getExpireDate());
return ResultUtil.success(shareToken);
}

@Override
public Map<String, String> getMountFileInfo(String fileId, String fileUsername) {
// 1.获取文件信息
FileDocument fileDocument = fileService.getById(fileId);
// 2. 获取分享信息
ShareDO shareDO = getShare(fileDocument.getShareId());
// 3. 获取基础分享文件信息
FileDocument shareBaseFile = fileService.getById(shareDO.getFileId());
// 4.获取挂载信息
FileDocument mountFile = getMountFile(shareDO.getFileId(), userLoginHolder.getUserId());
if (mountFile == null) {
throw new CommonException(ExceptionType.WARNING.getCode(), "挂载文件不存在");
}
// 5.获取文件上父级目录信息
String parentName = Paths.get(fileDocument.getPath()).toFile().getName();
String parentPath = Paths.get(fileDocument.getPath()).getParent().toString();
if (parentPath.length() > 1) {
parentPath = parentPath + PATH_DELIMITER;
}
FileDocument folderInfo = fileService.getFileDocumentByPathAndName(parentPath, parentName, fileUsername);
if (folderInfo == null) {
return Map.of();
}
String path = mountFile.getPath() + fileDocument.getPath().substring(shareBaseFile.getPath().length());
String folder = folderInfo.getId();
return Map.of(
"path", path,
"folder", folder
);
}

public void validShare(String shareToken, ShareDO shareDO) {
if (checkWhetherExpired(shareDO)) {
throw new CommonException(ExceptionType.WARNING.getCode(), SHARE_EXPIRED);
Expand Down Expand Up @@ -360,6 +394,7 @@ public void validShareCode(String shareToken, ShareDO shareDO) {

/**
* 分享验证失败·
*
* @param shareDO 分享信息
*/
private static void shareValidFailed(ShareDO shareDO) {
Expand All @@ -371,10 +406,20 @@ private static void shareValidFailed(ShareDO shareDO) {
}

private boolean existsMountFile(String fileId, String userId) {
Query query = getMountQuery(fileId, userId);
return mongoTemplate.exists(query, FileDocument.class);
}

private FileDocument getMountFile(String fileId, String userId) {
Query query = getMountQuery(fileId, userId);
return mongoTemplate.findOne(query, FileDocument.class);
}

private static Query getMountQuery(String fileId, String userId) {
Query query = new Query();
query.addCriteria(Criteria.where("mountFileId").is(fileId));
query.addCriteria(Criteria.where(IUserService.USER_ID).is(userId));
return mongoTemplate.exists(query, FileDocument.class);
return query;
}

@Override
Expand All @@ -395,6 +440,7 @@ public ShareDO getShareByFileId(String fileId) {

/**
* 检查是否过期
*
* @param shareDO 分享信息
* @return 是否过期 true:过期 false:未过期
*/
Expand Down Expand Up @@ -496,6 +542,7 @@ public ResponseResult<Object> cancelShare(String[] shareId) {

/**
* 移除share属性
*
* @param shareDO ShareDO
*/
private void removeShareProperty(ShareDO shareDO) {
Expand Down

0 comments on commit 6016469

Please sign in to comment.