Skip to content
Closed

1 #1

Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
246 commits
Select commit Hold shift + click to select a range
f03d109
修改README
X1192176811 Jul 11, 2020
3936199
修改README
X1192176811 Jul 11, 2020
37d97fd
修改README
X1192176811 Jul 11, 2020
6073a81
修改QQ登录逻辑
X1192176811 Jul 12, 2020
c80fd80
修改README
X1192176811 Jul 12, 2020
cdf4f3e
修改QQ登录逻辑
X1192176811 Jul 12, 2020
6377722
修改README
X1192176811 Jul 12, 2020
207b5ef
优化用户逻辑
X1192176811 Jul 12, 2020
4c83537
修改Security配置
X1192176811 Jul 13, 2020
d112b96
修改Security配置
X1192176811 Jul 13, 2020
88af21a
修改配置文件
X1192176811 Jul 19, 2020
9c718b1
修复第三方登录
X1192176811 Oct 29, 2020
c3a9428
修复第三方登录
X1192176811 Oct 29, 2020
9fd37b2
修改bug,新增mysql5文件
X1192176811 Nov 5, 2020
d615ad9
修复第三方登录
X1192176811 Nov 5, 2020
7a4c036
修复第三方登录
X1192176811 Nov 5, 2020
9ba20a3
博客迭代更新
Mar 20, 2021
b451452
博客迭代更新
X1192176811 Mar 20, 2021
92c28fb
博客迭代更新
Mar 20, 2021
144dc9f
博客迭代更新
X1192176811 Mar 20, 2021
f2d5aed
博客迭代更新
Mar 20, 2021
8783917
博客迭代更新
X1192176811 Mar 20, 2021
205efdd
博客迭代更新
Mar 20, 2021
766ad83
博客迭代更新
X1192176811 Mar 20, 2021
e94e8fa
修改es配置
Mar 21, 2021
a401bd3
修改es配置
X1192176811 Mar 21, 2021
a4aa3b4
fix
Mar 21, 2021
9c04452
fix
X1192176811 Mar 21, 2021
8959869
博客迭代更新
Mar 22, 2021
a7812a8
博客迭代更新
X1192176811 Mar 22, 2021
588c423
博客迭代更新
Mar 22, 2021
2c20490
博客迭代更新
X1192176811 Mar 22, 2021
3b4b6cb
博客迭代更新
Mar 23, 2021
fb3c0f3
博客迭代更新
X1192176811 Mar 23, 2021
5baa974
博客迭代更新
Mar 23, 2021
49cc5b0
博客迭代更新
X1192176811 Mar 23, 2021
4f593e2
博客迭代更新
Mar 23, 2021
0f31203
博客迭代更新
X1192176811 Mar 23, 2021
bac104b
fix
Mar 24, 2021
2ffa2ac
fix
X1192176811 Mar 24, 2021
29f8de1
fix
Mar 26, 2021
51e1dae
fix
X1192176811 Mar 26, 2021
2c89e48
博客迭代更新
Mar 29, 2021
564c1fa
博客迭代更新
X1192176811 Mar 29, 2021
ba812ee
博客迭代更新
Mar 29, 2021
5a31c16
博客迭代更新
X1192176811 Mar 29, 2021
f8b0960
博客迭代更新
Mar 30, 2021
dcce974
博客迭代更新
X1192176811 Mar 30, 2021
578dd44
博客迭代更新
Mar 30, 2021
7a3b208
博客迭代更新
X1192176811 Mar 30, 2021
d2f9682
websocket添加心跳连接
Mar 30, 2021
6056c1a
websocket添加心跳连接
X1192176811 Mar 30, 2021
b0f187d
博客迭代更新
Mar 31, 2021
0c47001
博客迭代更新
X1192176811 Mar 31, 2021
e265459
博客迭代更新
Mar 31, 2021
3c0bc93
博客迭代更新
X1192176811 Mar 31, 2021
846037f
博客迭代更新
X1192176811 Apr 1, 2021
fd027b5
Merge remote-tracking branch 'github/master'
X1192176811 Apr 1, 2021
3423bb9
fix
X1192176811 Apr 3, 2021
257331b
fix
X1192176811 Apr 5, 2021
f5d4d81
fix
X1192176811 Apr 8, 2021
f9effc2
新增评论邮件提醒
X1192176811 Apr 16, 2021
1298dde
fix
X1192176811 Apr 16, 2021
a19c175
fix
X1192176811 Apr 16, 2021
abe5674
fix
X1192176811 Apr 16, 2021
8f477cb
fix
X1192176811 Apr 16, 2021
74f66d2
fix
X1192176811 Apr 21, 2021
13fe6a5
fix
X1192176811 Apr 21, 2021
5bbf06c
fix
X1192176811 Apr 28, 2021
b8bbf17
fix
X1192176811 May 7, 2021
7f08229
fix
X1192176811 May 7, 2021
f4ca238
fix
X1192176811 May 8, 2021
0d03773
fix
X1192176811 May 14, 2021
53b8e43
fix
X1192176811 May 14, 2021
c97c3eb
fix
X1192176811 May 21, 2021
c53bea5
fix
X1192176811 May 25, 2021
00a4832
fix
X1192176811 May 26, 2021
92b165c
fix
X1192176811 Jun 3, 2021
9df158b
fix
X1192176811 Jun 8, 2021
3a423ff
fix
X1192176811 Jun 9, 2021
37dc470
fix
X1192176811 Jun 17, 2021
68761d2
fix
X1192176811 Jun 26, 2021
5e95bdb
优化前端打包体积
X1192176811 Jun 29, 2021
d820d2d
优化首页查询
X1192176811 Jun 29, 2021
b05cfc7
fix音乐播放器
X1192176811 Jul 2, 2021
c00fc82
优化首页信息查询
X1192176811 Jul 15, 2021
f140bcb
Update ArticleDao.xml
PassionLemon Jul 20, 2021
a020cd2
Merge pull request #36 from PassionLemon/patch-1
X1192176811 Jul 20, 2021
39fc35c
fix img过滤
X1192176811 Jul 21, 2021
1bbca14
fix img过滤
X1192176811 Jul 21, 2021
735ff1e
Merge remote-tracking branch 'github/master'
X1192176811 Jul 21, 2021
c0b69b2
修改pom
X1192176811 Jul 26, 2021
8799a70
修改图片预览BUG
X1192176811 Jul 30, 2021
b418c85
减小打包体积
X1192176811 Aug 1, 2021
6b51abe
版本迭代更新
X1192176811 Aug 12, 2021
7a89af3
Merge remote-tracking branch 'origin/master'
X1192176811 Aug 12, 2021
d4ae2e5
Update application.yml
X1192176811 Aug 12, 2021
12b5389
上传相册
X1192176811 Aug 12, 2021
04f5723
上传相册
X1192176811 Aug 12, 2021
a8972d0
Merge remote-tracking branch 'origin/master'
X1192176811 Aug 12, 2021
60447ec
修改时区BUG
X1192176811 Aug 12, 2021
7d141b4
修改时区BUG
X1192176811 Aug 12, 2021
32793fa
修改时区BUG
X1192176811 Aug 13, 2021
52e62c5
修改README
X1192176811 Aug 13, 2021
21de36f
修改上传BUG
X1192176811 Aug 13, 2021
4f5dcde
修改分享bug
X1192176811 Aug 13, 2021
da226fe
修改文字错误
X1192176811 Aug 13, 2021
663ead9
修改时区bug
X1192176811 Aug 13, 2021
0597fe2
修改在线用户分页bug
X1192176811 Aug 13, 2021
ed8c635
Update application.yml
X1192176811 Aug 13, 2021
a2d4bee
修改关于我bug
X1192176811 Aug 14, 2021
0ed04d6
Merge remote-tracking branch 'origin/master'
X1192176811 Aug 14, 2021
e445890
修改聊天室时间bug
X1192176811 Aug 14, 2021
d452c77
修改在线用户显示
X1192176811 Aug 14, 2021
eed14c3
优化代码
X1192176811 Aug 14, 2021
2a4e239
修改分页bug
X1192176811 Aug 14, 2021
c862721
修改回复bug
X1192176811 Aug 14, 2021
72de52c
修改回复bug
X1192176811 Aug 14, 2021
529df51
修改maxwell配置
X1192176811 Aug 14, 2021
0d031f0
修改注释描述
X1192176811 Aug 15, 2021
2ffbe5a
修改第三方最近登录时间
X1192176811 Aug 15, 2021
7c9f10c
修改README
X1192176811 Aug 15, 2021
44a583e
修改README
X1192176811 Aug 15, 2021
b0c3754
修改README
X1192176811 Aug 15, 2021
248d599
修改README
X1192176811 Aug 15, 2021
c526f9d
修改README
X1192176811 Aug 15, 2021
d6d845c
修改README
X1192176811 Aug 15, 2021
0a52c46
修改README
X1192176811 Aug 15, 2021
8cf195f
修改README
X1192176811 Aug 15, 2021
d9fc08a
修改README
X1192176811 Aug 15, 2021
d4e57d4
修改README
X1192176811 Aug 15, 2021
16a29e4
修改README
X1192176811 Aug 15, 2021
d336520
修改注释
X1192176811 Aug 16, 2021
cfd19b3
修改注释
X1192176811 Aug 16, 2021
190dff0
修改README
X1192176811 Aug 16, 2021
b29f29a
修改README
X1192176811 Aug 17, 2021
c044fb4
修改README
X1192176811 Aug 17, 2021
7ab00a0
修改微博登录bug
X1192176811 Aug 18, 2021
b281c35
修改方法名bug
X1192176811 Aug 21, 2021
de45ccc
新增用户区域分布统计
X1192176811 Aug 24, 2021
8ba2037
修改es搜索bug
X1192176811 Aug 24, 2021
55186a1
修改访问量统计bug
X1192176811 Aug 24, 2021
1b702fd
修改访问量统计bug
X1192176811 Aug 24, 2021
009375b
修改查询文章排行
X1192176811 Aug 25, 2021
84789f1
修改查询评论
X1192176811 Aug 25, 2021
5b606e4
修改注释描述
X1192176811 Aug 26, 2021
695dfce
修改后台搜索
X1192176811 Aug 26, 2021
24176ff
修改资源搜索
X1192176811 Aug 26, 2021
75925c8
修改删除资源bug
X1192176811 Aug 26, 2021
6327310
修改文章搜索
X1192176811 Aug 26, 2021
a5e5b9a
修改定时任务时区
X1192176811 Aug 26, 2021
fd890c1
修改敏感词文件
X1192176811 Aug 27, 2021
44bb671
修改敏感词文件
X1192176811 Aug 27, 2021
6899761
修改用户区域分布
X1192176811 Aug 27, 2021
66d9238
修改后台用户查询bug
X1192176811 Aug 27, 2021
9917139
修改注释
X1192176811 Aug 29, 2021
458bd34
修改readme
X1192176811 Aug 29, 2021
4277876
修改readme
X1192176811 Aug 29, 2021
a329202
修改readme
X1192176811 Sep 1, 2021
9c73631
修改手机QQ登录bug
X1192176811 Sep 3, 2021
ebc6b2e
修改敏感词
X1192176811 Sep 3, 2021
f4a77be
修改相册显示bug
X1192176811 Sep 9, 2021
9a387fe
优化代码
X1192176811 Sep 9, 2021
18a7041
修改图片压缩算法
X1192176811 Sep 11, 2021
29ad263
修改Valid校验BUG
X1192176811 Sep 11, 2021
348bc0b
修改敏感词文件
X1192176811 Sep 11, 2021
3c343a1
优化第三方登录逻辑
X1192176811 Sep 21, 2021
e65194d
修改第三方登录逻辑
X1192176811 Sep 21, 2021
6bd092c
优化代码结构
X1192176811 Sep 22, 2021
0e8c079
优化代码结构
X1192176811 Sep 22, 2021
59c469b
修改分类查询bug
X1192176811 Sep 24, 2021
2ca9d5b
修改分类查询bug
X1192176811 Sep 24, 2021
e23d2c2
修改条件名显示
X1192176811 Sep 25, 2021
0559b0f
修改夜间模式聊天室显示bug
X1192176811 Oct 1, 2021
88995a2
修改图片地址
X1192176811 Oct 4, 2021
4e6305b
修改yml配置
X1192176811 Oct 4, 2021
be467aa
修改yml注释
X1192176811 Oct 4, 2021
194b2c9
关闭移动端音乐播放器
X1192176811 Oct 6, 2021
23f88df
修改音乐接口
X1192176811 Oct 24, 2021
b8b9ed2
修改readme
X1192176811 Nov 5, 2021
c292819
修改页面配置接口
X1192176811 Nov 5, 2021
32832e0
修改友链评论bug
X1192176811 Nov 28, 2021
1ea601a
修改xml
X1192176811 Dec 2, 2021
5dfb36f
修改移动照片对话框bug
X1192176811 Dec 5, 2021
cb8f08c
修改readme
X1192176811 Dec 6, 2021
d519c1c
修改关于我页面
X1192176811 Dec 10, 2021
55becda
修改readme
X1192176811 Dec 24, 2021
cc03626
修改字符过滤
X1192176811 Dec 31, 2021
9a4d1b4
修改字体显示
X1192176811 Dec 31, 2021
ad545ee
修改markdown css
X1192176811 Jan 1, 2022
133bc12
修改markdown css
X1192176811 Jan 1, 2022
727ad96
修改markdown css
X1192176811 Jan 3, 2022
2aa2534
修改评论查询bug
X1192176811 Jan 16, 2022
2e1296e
修改readme
X1192176811 Jan 17, 2022
da4e4be
修改readme
X1192176811 Jan 17, 2022
1299045
修改readme
X1192176811 Jan 17, 2022
581584d
修改yml配置
X1192176811 Jan 18, 2022
d0a9ef5
新增说说功能
X1192176811 Jan 24, 2022
c1b006d
新增说说功能
X1192176811 Jan 24, 2022
9b5b9fb
修改评论提醒
X1192176811 Jan 27, 2022
da19e17
新增说说功能
X1192176811 Jan 27, 2022
8a401c4
修改接口文档
X1192176811 Jan 27, 2022
38b5064
修改评论回复查询显示
X1192176811 Jan 27, 2022
7377688
修改音乐播放器查询
X1192176811 Jan 28, 2022
b88375b
修改博客配置
X1192176811 Jan 28, 2022
4576ed8
优化代码
X1192176811 Feb 18, 2022
94656bf
修改readme
X1192176811 Feb 22, 2022
3b827ca
优化评论逻辑
X1192176811 Mar 11, 2022
fc152a5
修改文章阅读量Bug
X1192176811 Mar 19, 2022
d321f70
增加redis接口限流注解
Mar 25, 2022
8523d1b
Merge pull request #58 from DiCaprio17/master
X1192176811 Mar 25, 2022
f7f05dc
修改注释
X1192176811 Mar 25, 2022
d3494d7
修改限流逻辑
X1192176811 Mar 29, 2022
0c69b77
fix:调整代码
Apr 12, 2022
87cf21a
perf:优化事物代码
Apr 12, 2022
d19fa42
Merge pull request #64 from jianfengqs/master
X1192176811 Apr 12, 2022
c3f6678
Revert "perf:优化事物代码"
jianfengqs Apr 12, 2022
721b40e
perf:优化事物代码、集合调整
jianfengqs Apr 12, 2022
927671b
Merge pull request #65 from jianfengqs/master
X1192176811 Apr 12, 2022
5ef5001
perf:替换为编程式事务
Apr 28, 2022
fbc0470
perf:移除不必要的事务
jianfengqs Apr 28, 2022
08e61f0
Merge pull request #67 from jianfengqs/master
X1192176811 Apr 28, 2022
7005a61
修改敏感词过滤,优化代码
X1192176811 May 7, 2022
9948981
修改浏览量统计bug
X1192176811 May 12, 2022
96ae4c9
新增留言限流
X1192176811 May 12, 2022
20ed495
修改cdn
X1192176811 May 21, 2022
7604c40
修改权限管理bug
X1192176811 May 21, 2022
05a34f5
修改字段大小
X1192176811 May 21, 2022
e14cae3
fix: 修复session过期前端无法退回到登录页的bug
Lunaticzy May 30, 2022
2c283a0
fix: 消除build时的警告
Lunaticzy May 30, 2022
46e5753
feat: 增加腾讯对象存储支持
Lunaticzy May 30, 2022
58fb56e
Merge pull request #75 from Lunaticzy/master
X1192176811 May 30, 2022
0d4dbe5
fix: [#70] 修改部分问题
Lunaticzy Jun 28, 2022
c34d8f2
fix: 修复文章发布后无法发布其文章
Lunaticzy Jun 30, 2022
ba07d34
Merge pull request #82 from Lunaticzy/master
X1192176811 Jul 2, 2022
3d67cf2
增加markdown插件
X1192176811 Jul 23, 2022
0ab436c
新增文章导入,文章导出功能
X1192176811 Jul 24, 2022
e6451a9
perf:优化日志
huangguangshan Jul 27, 2022
2d0e53e
Merge pull request #91 from huangguangshan/featrue/perf
X1192176811 Jul 27, 2022
8383309
feat: 支持Hexo文章导入(自动设置标题、时间、分类、标签)
linweiyuan Jul 28, 2022
456632b
Merge pull request #93 from linweiyuan/master
X1192176811 Jul 28, 2022
4151937
修改导入hexo文章逻辑
X1192176811 Jul 28, 2022
40e9ed1
添加默认文章封面
X1192176811 Jul 28, 2022
f55a349
修改fastjson版本
X1192176811 Jul 28, 2022
6f38bce
修改JSON解析BUG
X1192176811 Jul 29, 2022
d6be4ea
修改readme
X1192176811 Sep 16, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions blog-springboot/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
target
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.minzheng.blog.constant;

/**
* Hexo文章常量
* <p>
* Hexo结构
* ---
* title: xxx
* date: yyyy-MM-dd HH:mm:ss
* categories: [a, b, c]
* tags: [d, e, f]
* ---
* 正文
*
* @author linweiyuan
* @date 2022/07/28
*/
public class HexoConst {
/**
* 标题
*/
public static final String TITLE_PREFIX = "title:";

/**
* 日期
*/
public static final String DATE_PREFIX = "date:";

/**
* 分类
*/
public static final String CATEGORIES_PREFIX = "categories:";

/**
* 标签
*/
public static final String TAGS_PREFIX = "tags:";

/**
* 分隔符
*/
public static final String DELIMITER = "---";

/**
* 换行符
*/
public static final String NEW_LINE = "\n";
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,18 @@
import com.minzheng.blog.dto.*;
import com.minzheng.blog.enums.FilePathEnum;
import com.minzheng.blog.service.ArticleService;
import com.minzheng.blog.strategy.context.ArticleImportStrategyContext;
import com.minzheng.blog.strategy.context.UploadStrategyContext;
import com.minzheng.blog.vo.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.validation.Valid;
import java.util.*;
import java.util.List;

import static com.minzheng.blog.constant.OptTypeConst.*;

Expand All @@ -33,6 +33,8 @@ public class ArticleController {
private ArticleService articleService;
@Autowired
private UploadStrategyContext uploadStrategyContext;
@Autowired
private ArticleImportStrategyContext articleImportStrategyContext;

/**
* 查看文章归档
Expand Down Expand Up @@ -218,14 +220,13 @@ public Result<List<String>> exportArticles(@RequestBody List<Integer> articleIdL
* 导入文章
*
* @param file 文件
* @param type 文章类型
* @return {@link Result<>}
*/
@ApiOperation(value = "导入文章")
@PostMapping("/admin/articles/import")
public Result<?> importArticles(MultipartFile file) {
articleService.importArticles(file);
public Result<?> importArticles(MultipartFile file, @RequestParam(required = false) String type) {
articleImportStrategyContext.importArticles(file, type);
return Result.ok();
}

}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package com.minzheng.blog.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
* Markdown文章类型枚举
*
* @author linweiyuan
* @date 2022/07/28
*/
@Getter
@AllArgsConstructor
public enum MarkdownTypeEnum {
/**
* 普通文章
*/
NORMAL("", "normalArticleImportStrategyImpl"),
/**
* Hexo文章
*/
HEXO("hexo", "hexoArticleImportStrategyImpl");

/**
* 类型
*/
private final String type;

/**
* 策略
*/
private final String strategy;

public static String getMarkdownType(String name) {
if (name == null) {
return NORMAL.getStrategy();
}
for (MarkdownTypeEnum value : MarkdownTypeEnum.values()) {
if (value.getType().equalsIgnoreCase(name)) {
return value.getStrategy();
}
}
return null;
}
}
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
package com.minzheng.blog.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.minzheng.blog.dto.*;
import com.minzheng.blog.entity.Article;
import com.baomidou.mybatisplus.extension.service.IService;
import com.minzheng.blog.vo.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

Expand Down Expand Up @@ -112,12 +111,4 @@ public interface ArticleService extends IService<Article> {
* @return {@link List}<{@link String}> 文件地址
*/
List<String> exportArticles(List<Integer> articleIdList);

/**
* 导入文章
*
* @param file 文件
*/
void importArticles(MultipartFile file);

}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,11 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.minzheng.blog.dao.*;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.minzheng.blog.dao.ArticleDao;
import com.minzheng.blog.dao.ArticleTagDao;
import com.minzheng.blog.dao.CategoryDao;
import com.minzheng.blog.dao.TagDao;
import com.minzheng.blog.dto.*;
import com.minzheng.blog.entity.Article;
import com.minzheng.blog.entity.ArticleTag;
Expand All @@ -15,7 +19,6 @@
import com.minzheng.blog.enums.FilePathEnum;
import com.minzheng.blog.exception.BizException;
import com.minzheng.blog.service.ArticleService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.minzheng.blog.service.ArticleTagService;
import com.minzheng.blog.service.RedisService;
import com.minzheng.blog.service.TagService;
Expand All @@ -30,10 +33,9 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpSession;
import java.io.*;
import java.io.ByteArrayInputStream;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
Expand Down Expand Up @@ -276,28 +278,6 @@ public List<String> exportArticles(List<Integer> articleIdList) {
return urlList;
}

@Override
public void importArticles(MultipartFile file) {
// 获取文件名作为文章标题
String articleTitle = Objects.requireNonNull(file.getOriginalFilename()).split("\\.")[0];
// 获取文章内容
StringBuilder articleContent = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(file.getInputStream()))) {
while (reader.ready()) {
articleContent.append((char) reader.read());
}
} catch (IOException e) {
log.error(StrUtil.format("导入文章失败,堆栈:{}", ExceptionUtil.stacktraceToString(e)));
throw new BizException("导入文章失败");
}
articleDao.insert(Article.builder()
.userId(UserUtils.getLoginUser().getUserInfoId())
.articleTitle(articleTitle)
.articleContent(articleContent.toString())
.status(DRAFT.getStatus())
.build());
}

@Override
public List<ArticleSearchDTO> listArticlesBySearch(ConditionVO condition) {
return searchStrategyContext.executeSearchStrategy(condition.getKeywords());
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.minzheng.blog.strategy;

import org.springframework.web.multipart.MultipartFile;

/**
* 文章导入策略
*
* @author linweiyuan
* @date 2022/07/28
*/
public interface ArticleImportStrategy {

/**
* 导入文章
*
* @param file 文件
*/
void importArticles(MultipartFile file);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.minzheng.blog.strategy.context;

import com.minzheng.blog.enums.MarkdownTypeEnum;
import com.minzheng.blog.strategy.ArticleImportStrategy;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.util.Map;

/**
* 文章导入策略上下文
*
* @author linweiyuan
* @date 2022/07/28
*/
@Service
public class ArticleImportStrategyContext {
@Autowired
private Map<String, ArticleImportStrategy> articleImportStrategyMap;

public void importArticles(MultipartFile file, String type) {
articleImportStrategyMap.get(MarkdownTypeEnum.getMarkdownType(type)).importArticles(file);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
package com.minzheng.blog.strategy.impl;

import cn.hutool.core.exceptions.ExceptionUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
import com.minzheng.blog.exception.BizException;
import com.minzheng.blog.service.ArticleService;
import com.minzheng.blog.strategy.ArticleImportStrategy;
import com.minzheng.blog.vo.ArticleVO;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;

import static com.minzheng.blog.constant.HexoConst.*;
import static com.minzheng.blog.enums.ArticleStatusEnum.PUBLIC;

/**
* Hexo文章导入策略
*
* @author linweiyuan
* @date 2022/07/28
*/
@Slf4j
@Service("hexoArticleImportStrategyImpl")
public class HexoArticleImportStrategyImpl implements ArticleImportStrategy {
@Autowired
private ArticleService articleService;

private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

@Override
public void importArticles(MultipartFile file) {
try {
HexoArticleVO hexoArticleVO = new HexoArticleVO();
hexoArticleVO.setType(1); // 原创
hexoArticleVO.setStatus(PUBLIC.getStatus()); // 公开 (DRAFT不保存分类)

AtomicInteger hexoDelimiterCount = new AtomicInteger();
StringBuilder articleContent = new StringBuilder();

BufferedReader reader = new BufferedReader(new InputStreamReader(file.getInputStream(), StandardCharsets.UTF_8));
reader.lines().forEach(line -> {
if (hexoDelimiterCount.get() == 2) {
// 分隔符结束就是正文
articleContent.append(line).append(NEW_LINE);
} else {
if (line.equals(DELIMITER)) {
hexoDelimiterCount.getAndIncrement();
}
if (hexoDelimiterCount.get() == 1) {
if (line.startsWith(TITLE_PREFIX)) {
hexoArticleVO.setArticleTitle(line.replace(TITLE_PREFIX, "").trim());
} else if (line.startsWith(DATE_PREFIX)) {
hexoArticleVO.setCreateTime(LocalDateTime.parse(line.replace(DATE_PREFIX, "").trim(), formatter));
} else if (line.startsWith(CATEGORIES_PREFIX)) {
// 不支持多级分类
hexoArticleVO.setCategoryName(new JSONArray(line.replace(CATEGORIES_PREFIX, "").trim()).getStr(0));
} else if (line.startsWith(TAGS_PREFIX)) {
hexoArticleVO.setTagNameList(new JSONArray(line.replace(TAGS_PREFIX, "").trim()).toList(String.class));
}
}
}
});
hexoArticleVO.setArticleContent(articleContent.toString());

articleService.saveOrUpdateArticle(hexoArticleVO);
} catch (IOException e) {
log.error(StrUtil.format("导入Hexo文章失败, 堆栈:{}", ExceptionUtil.stacktraceToString(e)));
throw new BizException("导入Hexo文章失败");
}
}

@SuppressWarnings("Lombok")
@Data
static class HexoArticleVO extends ArticleVO {
private String articleTitle;
private String categoryName;
private List<String> tagNameList;
private String articleContent;
private Integer type;
private Integer status;
private LocalDateTime createTime;
}
}
Loading