Skip to content

Commit

Permalink
Merge pull request #213 from jamebal/develop
Browse files Browse the repository at this point in the history
feat: 分享链接可自定义地址
  • Loading branch information
jamebal authored Dec 31, 2024
2 parents 64fb88b + a253907 commit d02b890
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 14 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -398,7 +398,7 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.jmal.clouddisk.ClouddiskApplication</mainClass>
<mainClass>com.jmal.clouddisk.JmalCloudApplication</mainClass>
<executable>true</executable>
<layout>ZIP</layout>
<includes>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@
@EnableCaching
@EnableScheduling
@Slf4j
public class ClouddiskApplication {
public class JmalCloudApplication {

public static void main(String[] args) {
SecureUtil.disableBouncyCastle();
SpringApplication application = new SpringApplication(ClouddiskApplication.class);
SpringApplication application = new SpringApplication(JmalCloudApplication.class);
// 允许循环引用
application.setAllowCircularReferences(true);

Expand Down
31 changes: 20 additions & 11 deletions src/main/java/com/jmal/clouddisk/service/impl/ShareServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public ResponseResult<Object> generateLink(ShareDO share) {
if (Boolean.TRUE.equals(share.getIsPrivacy())) {
share.setExtractionCode(generateExtractionCode());
}
share.setShortId(generateShortId());
share.setShortId(generateShortId(share));
shareDO = mongoTemplate.save(share, COLLECTION_NAME);
} else {
setShortId(share, shareDO);
Expand All @@ -108,7 +108,7 @@ public ResponseResult<Object> generateLink(ShareDO share) {

private void setShortId(ShareDO share, ShareDO shareDO) {
if (shareDO.getShortId() == null) {
String shortId = generateShortId();
String shortId = generateShortId(share);
share.setShortId(shortId);
shareDO.setShortId(shortId);
} else {
Expand All @@ -120,16 +120,27 @@ private void setShortId(ShareDO share, ShareDO shareDO) {
* 生成5-8位短链接字符串
* @return 链接字符串
*/
private String generateShortId() {
private String generateShortId(ShareDO share) {
if (CharSequenceUtil.isNotBlank(share.getShortId())) {
// 检测是否已经存在
if (isExistsShareShortId(share.getShortId())) {
throw new CommonException(ExceptionType.WARNING.getCode(), "地址 \"" + share.getShortId() + "\" 已存在");
}
return share.getShortId();
}
String shortId = Base62.encode(Convert.toStr(RandomUtil.randomInt(1000, 1000000)));
Query query = new Query();
query.addCriteria(Criteria.where(Constants.SHORT_ID).is(shortId));
if (mongoTemplate.exists(query, ShareDO.class, COLLECTION_NAME)) {
return generateShortId();
if (isExistsShareShortId(shortId)) {
return generateShortId(share);
}
return shortId;
}

private boolean isExistsShareShortId(String shortId) {
Query query = new Query();
query.addCriteria(Criteria.where(Constants.SHORT_ID).is(shortId));
return mongoTemplate.exists(query, ShareDO.class, COLLECTION_NAME);
}

private void checkOssPath(ShareDO share, String userId, FileDocument file) {
Path path = Paths.get(share.getFileId());
String ossPath = CaffeineUtil.getOssPath(path);
Expand Down Expand Up @@ -282,12 +293,10 @@ public ResponseResult<Object> generateShareToken(String fileId) {
if (shareDO == null || BooleanUtil.isFalse(shareDO.getIsPrivacy())) {
return ResultUtil.warning("分享不存在或不是私密分享");
}
if (!fileDocument.getUserId().equals(userLoginHolder.getUserId())) {
// 非本人判断是否有挂载
if (!existsMountFile(shareDO.getFileId(), userLoginHolder.getUserId())) {
if (!fileDocument.getUserId().equals(userLoginHolder.getUserId()) && !existsMountFile(shareDO.getFileId(), userLoginHolder.getUserId())) {
return ResultUtil.error(ExceptionType.PERMISSION_DENIED);
}
}

// 生成share-token, share-token有效期等于分享有效期
String shareToken = TokenUtil.createToken(shareDO.getId(), shareDO.getExpireDate());
return ResultUtil.success(shareToken);
Expand Down
Binary file removed www/releases/dist-latest.tar
Binary file not shown.

0 comments on commit d02b890

Please sign in to comment.