Skip to content

Commit 84a3d8d

Browse files
authored
Merge pull request #264 from 1171736840/dev
Dev
2 parents 0e673ea + d88e467 commit 84a3d8d

File tree

6 files changed

+40
-18
lines changed

6 files changed

+40
-18
lines changed

README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ Amazon S3、GoogleCloud Storage、FastDFS、 Azure Blob Storage、Cloudflare R2
4444

4545
💡 通过 WebDAV 连接到 Alist 后,可以使用百度网盘、天翼云盘、阿里云盘、迅雷网盘等常见存储服务,查看 [Alist 支持的存储平台](https://alist.nn.ci/zh/guide/webdav.html#webdav-%E5%AD%98%E5%82%A8%E6%94%AF%E6%8C%81)
4646

47+
🚚 支持在不同存储平台之间迁移文件,详情查看 [迁移文件](https://x-file-storage.xuyanwu.cn/#/迁移文件)
48+
4749
GitHub:https://github.com/dromara/x-file-storage
4850
<br />
4951
Gitee:https://gitee.com/dromara/x-file-storage
@@ -54,6 +56,8 @@ Gitee:https://gitee.com/dromara/x-file-storage
5456

5557
这里是简要的更新记录,查看 [详细的更新记录](https://x-file-storage.xuyanwu.cn/#/更新记录)
5658

59+
`2.2.0` 修复大量问题,新增获取文件、列举文件,重构预签名 URL 支持客户端上传、下载、删除等操作,新增 Solon 插件,优化手动分片上传等功能,详情查看 [更新记录](https://x-file-storage.xuyanwu.cn/#/更新记录?id=_220)
60+
<br />
5761
`2.1.0` 修复大量问题,新增存储平台 FastDFS 和 Azure Blob Storage,新增复制、移动(重命名)文件,手动分片上传(断点续传)和计算哈希等功能,详情查看 [更新记录](https://x-file-storage.xuyanwu.cn/#/更新记录?id=_210)
5862
<br />
5963
`2.0.0` 捐赠至 [dromara](https://dromara.org/zh) 开源社区,更改项目名、包名,优化项目结构、支持 Metadata 元数据等,从旧版升级需要注意,详情查看 [更新记录](https://x-file-storage.xuyanwu.cn/#/更新记录?id=_200)
@@ -71,10 +75,13 @@ Gitee:https://gitee.com/dromara/x-file-storage
7175
### 📅更新计划
7276

7377
- 接入存储平台:HDFS、火山云 TOS、Samba、NFS
74-
- 用户端直传
7578
- 追加缩略图
7679
- 文件内容预加载
7780
- 新增 Access 模块,尝试通过 HTTP、FTP、WebDAV 等协议对外提供接口,方便其它程序使用
81+
- 追加文件
82+
- 分片下载
83+
- 直接输出到 HttpServletResponse 的响应流中
84+
- 其它更多功能
7885

7986
-------
8087

docs/README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ Amazon S3、GoogleCloud Storage、FastDFS、 Azure Blob Storage、Cloudflare R2
4545

4646
💡 通过 WebDAV 连接到 Alist 后,可以使用百度网盘、天翼云盘、阿里云盘、迅雷网盘等常见存储服务,查看 [Alist 支持的存储平台](https://alist.nn.ci/zh/guide/webdav.html#webdav-%E5%AD%98%E5%82%A8%E6%94%AF%E6%8C%81)
4747

48+
🚚 支持在不同存储平台之间迁移文件,详情查看 [迁移文件](迁移文件)
49+
4850
GitHub:https://github.com/dromara/x-file-storage
4951
<br />
5052
Gitee:https://gitee.com/dromara/x-file-storage
@@ -55,6 +57,8 @@ Gitee:https://gitee.com/dromara/x-file-storage
5557

5658
这里是简要的更新记录,查看 [详细的更新记录](更新记录)
5759

60+
`2.2.0` 修复大量问题,新增获取文件、列举文件,重构预签名 URL 支持客户端上传、下载、删除等操作,新增 Solon 插件,优化手动分片上传等功能,详情查看 [更新记录](更新记录?id=_220)
61+
<br />
5862
`2.1.0` 修复大量问题,新增存储平台 FastDFS 和 Azure Blob Storage,新增复制、移动(重命名)文件,手动分片上传(断点续传)和计算哈希等功能,详情查看 [更新记录](更新记录?id=_210)
5963
<br />
6064
`2.0.0` 捐赠至 [dromara](https://dromara.org/zh) 开源社区,更改项目名、包名,优化项目结构、支持 Metadata 元数据等,从旧版升级需要注意,详情查看 [更新记录](更新记录?id=_200)
@@ -72,10 +76,13 @@ Gitee:https://gitee.com/dromara/x-file-storage
7276
# 📅更新计划
7377

7478
- 接入存储平台:HDFS、火山云 TOS、Samba、NFS
75-
- 用户端直传
7679
- 追加缩略图
7780
- 文件内容预加载
7881
- 新增 Access 模块,尝试通过 HTTP、FTP、WebDAV 等协议对外提供接口,方便其它程序使用
82+
- 追加文件
83+
- 分片下载
84+
- 直接输出到 HttpServletResponse 的响应流中
85+
- 其它更多功能
7986

8087
-------
8188

docs/更新记录.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
-------
44

55
## 📦2.2.0 :id=_220
6-
2024-07-01
6+
2024-07-02
77
- 新增获取文件
88
- 新增列举文件
99
- 重构预签名 URL 支持客户端上传、下载、删除等操作

docs/迁移文件.md

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33

44
## 从数据库读取迁移
55

6-
适用于项目从一开始就把上传的文件记录全部保存到了数据库,这时候只要读取数据库记录,再使用复制或移动文件功能就可以了
6+
`2.1.0` 版本开始支持,适用于项目从一开始就把上传的文件记录全部保存到了数据库,这时候只要读取数据库记录,再使用复制或移动文件功能就可以了
77

8-
此方案实现起来简单,速度快,兼容性好,只要数据库中保存了 ACL(访问控制列表) Metadata(元数据)等数据都可以一起迁移
8+
此方案实现起来简单,速度快,兼容性好,只要数据库中保存了 ACL(访问控制列表) Metadata(元数据)等数据都可以一起迁移
99

1010
建议使用复制功能来迁移,全部复制完成后检查没问题了,再使用删除功能删除旧文件
1111

@@ -80,9 +80,9 @@ class FileStorageServiceTransferTest {
8080

8181
## 从存储平台读取迁移
8282

83-
适用于迁移旧项目数据或未使用数据库等情况,需要使用列举文件功能递归获取到所有文件夹及文件
83+
`2.2.0` 版本开始支持,适用于迁移旧项目数据或未使用数据库等情况,需要使用列举文件功能递归获取到所有目录及文件
8484

85-
此方案实现起来较为复杂,兼容性差, ACL(访问控制列表) Metadata(元数据)等数据都需要手动处理
85+
此方案实现起来较为复杂, ACL(访问控制列表) Metadata(元数据)等数据都需要手动处理
8686

8787
建议使用复制功能来迁移,全部复制完成后检查没问题了,再使用删除功能删除旧文件
8888

@@ -113,29 +113,29 @@ class FileStorageServiceTransferTest {
113113
}
114114

115115
/**
116-
* 从存储平台读取迁移
116+
* 使用数据库迁移文件
117117
*/
118118
public void transfer(String fromPlatform, String toPlatform, String path) {
119119

120-
// 例举出当前路径下所有文件夹及文件
120+
// 例举出当前路径下所有目录及文件
121121
ListFilesResult result = fileStorageService
122122
.listFiles()
123123
.setPlatform(fromPlatform)
124124
.setPath(path)
125125
.listFiles();
126126

127-
// 递归迁移所有子文件夹
127+
// 递归迁移所有子目录
128128
for (RemoteDirInfo dir : result.getDirList()) {
129129
transfer(fromPlatform, toPlatform, path + dir.getName() + "/");
130130
}
131131

132-
//迁移当前路径下所有文件
132+
// 迁移当前路径下所有文件
133133
for (RemoteFileInfo remoteFileInfo : result.getFileList()) {
134134
// 转换成 FileInfo,注意 createTime 、metadata 及 userMetadata 可能需要自行处理,详情查看方法源码注释
135135
// 同时每个存储平台的 ACL 也不一样,也需要自行处理
136136
FileInfo fileInfo = remoteFileInfo.toFileInfo();
137137

138-
// 这里仅保留需要的 metadata
138+
// 这里仅保留需要的 metadata ,例如:
139139
Map<String, String> fromMetadata = new KebabCaseInsensitiveMap<>(fileInfo.getMetadata());
140140
Map<String, String> toMetadata = new HashMap<>();
141141
if (fromMetadata.containsKey(Constant.Metadata.CONTENT_TYPE)) {
@@ -154,6 +154,8 @@ class FileStorageServiceTransferTest {
154154
fileStorageService
155155
.move(fileInfo)
156156
.setPlatform(toPlatform)
157+
.setNotSupportMetadataThrowException(true) // 不支持元数据时抛出异常
158+
.setNotSupportAclThrowException(true) // 不支持 ACL 时抛出异常
157159
.setProgressListener((progressSize, allSize) -> log.info(
158160
"文件 {}/{} 迁移进度:{} {}%",
159161
fileInfo.getPath(), fileInfo.getFilename(), progressSize, progressSize * 100 / allSize))
@@ -162,6 +164,8 @@ class FileStorageServiceTransferTest {
162164
// fileStorageService
163165
// .copy(fileInfo)
164166
// .setPlatform(toPlatform)
167+
// .setNotSupportMetadataThrowException(true) // 不支持元数据时抛出异常
168+
// .setNotSupportAclThrowException(true) // 不支持 ACL 时抛出异常
165169
// .setProgressListener((progressSize, allSize) -> log.info(
166170
// "文件 {}/{} 迁移进度:{} {}%",
167171
// fileInfo.getPath(), fileInfo.getFilename(), progressSize, progressSize * 100 / allSize))

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@
7575
</scm>
7676

7777
<properties>
78-
<revision>2.2.0-SNAPSHOT</revision>
78+
<revision>2.2.0</revision>
7979
<!--region Maven Base-->
8080
<maven.version>3.8.1</maven.version>
8181
<java.version>8</java.version>

x-file-storage-tests/x-file-storage-general-test/src/test/java/org/dromara/x/file/storage/test/FileStorageServiceTransferTest.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ public void transferByDb() {
8181
}
8282

8383
/**
84-
* 测试迁移文件
84+
* 使用数据库迁移文件
8585
*/
8686
@Test
8787
public void transferByPlatform() {
@@ -96,18 +96,18 @@ public void transferByPlatform() {
9696
}
9797

9898
/**
99-
* 通过枚举文件的方式迁移文件
99+
* 使用数据库迁移文件
100100
*/
101101
public void transfer(String fromPlatform, String toPlatform, String path) {
102102

103-
// 例举出当前路径下所有文件夹及文件
103+
// 例举出当前路径下所有目录及文件
104104
ListFilesResult result = fileStorageService
105105
.listFiles()
106106
.setPlatform(fromPlatform)
107107
.setPath(path)
108108
.listFiles();
109109

110-
// 递归迁移所有子文件夹
110+
// 递归迁移所有子目录
111111
for (RemoteDirInfo dir : result.getDirList()) {
112112
transfer(fromPlatform, toPlatform, path + dir.getName() + "/");
113113
}
@@ -118,7 +118,7 @@ public void transfer(String fromPlatform, String toPlatform, String path) {
118118
// 同时每个存储平台的 ACL 也不一样,也需要自行处理
119119
FileInfo fileInfo = remoteFileInfo.toFileInfo();
120120

121-
// 这里仅保留需要的 metadata
121+
// 这里仅保留需要的 metadata ,例如:
122122
Map<String, String> fromMetadata = new KebabCaseInsensitiveMap<>(fileInfo.getMetadata());
123123
Map<String, String> toMetadata = new HashMap<>();
124124
if (fromMetadata.containsKey(Constant.Metadata.CONTENT_TYPE)) {
@@ -137,6 +137,8 @@ public void transfer(String fromPlatform, String toPlatform, String path) {
137137
fileStorageService
138138
.move(fileInfo)
139139
.setPlatform(toPlatform)
140+
.setNotSupportMetadataThrowException(true) // 不支持元数据时抛出异常
141+
.setNotSupportAclThrowException(true) // 不支持 ACL 时抛出异常
140142
.setProgressListener((progressSize, allSize) -> log.info(
141143
"文件 {}/{} 迁移进度:{} {}%",
142144
fileInfo.getPath(), fileInfo.getFilename(), progressSize, progressSize * 100 / allSize))
@@ -145,6 +147,8 @@ public void transfer(String fromPlatform, String toPlatform, String path) {
145147
// fileStorageService
146148
// .copy(fileInfo)
147149
// .setPlatform(toPlatform)
150+
// .setNotSupportMetadataThrowException(true) // 不支持元数据时抛出异常
151+
// .setNotSupportAclThrowException(true) // 不支持 ACL 时抛出异常
148152
// .setProgressListener((progressSize, allSize) -> log.info(
149153
// "文件 {}/{} 迁移进度:{} {}%",
150154
// fileInfo.getPath(), fileInfo.getFilename(), progressSize, progressSize * 100 / allSize))

0 commit comments

Comments
 (0)