Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
Administrator
/
framework-tools
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit cd7af517
authored
Jul 04, 2024
by
henry
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
删除多的包
1 parent
90cf2390
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
880 additions
and
10 deletions
arch-base/src/main/java/org/arch/modules/base/dto/DelDTO.java
arch-base/src/main/java/org/arch/modules/base/dto/DictDTO.java
arch-base/src/main/java/org/arch/modules/base/dto/DownloadObjectDTO.java
arch-base/src/main/java/org/arch/modules/base/dto/UpLoadDTO.java
arch-base/src/main/java/org/arch/modules/base/vo/UpLoadVO.java
arch-base/src/main/java/org/arch/utils/Constant.java
arch-base/src/main/java/org/arch/utils/FileUtils.java
arch-base/src/main/java/org/arch/utils/MD5Utils.java
arch-clouds/attach/src/main/java/org/arch/Main.java
arch-clouds/pom.xml
arch-clouds/attach/pom.xml → arch-clouds/storage/pom.xml
arch-clouds/storage/src/main/java/org/arch/storage/config/StoreConfiguration.java
arch-clouds/storage/src/main/java/org/arch/storage/entity/File.java
arch-clouds/storage/src/main/java/org/arch/storage/mapper/FileMapper.java
arch-clouds/storage/src/main/java/org/arch/storage/service/OssService.java
arch-clouds/storage/src/main/java/org/arch/storage/service/impl/FileRecorderImpl.java
arch-clouds/storage/src/main/java/org/arch/storage/service/impl/OssServiceImpl.java
arch-clouds/storage/src/main/resources/META-INF/spring.factories
arch-overall/pom.xml
arch-base/src/main/java/org/arch/modules/base/dto/DelDTO.java
0 → 100644
View file @
cd7af51
package
org
.
arch
.
modules
.
base
.
dto
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
@ApiModel
(
description
=
"oss对象存储DTO"
)
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
DelDTO
{
/**
* 文件 ID
*/
@ApiModelProperty
(
value
=
"文件ID"
)
private
Long
fileId
;
/**
* 地址
*/
@ApiModelProperty
(
value
=
"地址"
)
private
String
url
;
}
arch-base/src/main/java/org/arch/modules/base/dto/DictDTO.java
0 → 100644
View file @
cd7af51
package
org
.
arch
.
modules
.
base
.
dto
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* 字典 dto
*
* @author
* @date 2023/12/14
*/
@ApiModel
(
description
=
"字典 dto"
)
@Data
public
class
DictDTO
{
/**
* 字典标识
*/
@ApiModelProperty
(
value
=
"字典标识"
,
position
=
1
)
private
String
key
;
}
arch-base/src/main/java/org/arch/modules/base/dto/DownloadObjectDTO.java
0 → 100644
View file @
cd7af51
package
org
.
arch
.
modules
.
base
.
dto
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* oss对象存储
*
* @author admin
* @date 2023/12/05
*/
@ApiModel
(
description
=
"oss对象存储DTO"
)
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
DownloadObjectDTO
{
/**
* 文件 ID
*/
@ApiModelProperty
(
value
=
"文件ID"
)
private
Long
fileId
;
}
arch-base/src/main/java/org/arch/modules/base/dto/UpLoadDTO.java
0 → 100644
View file @
cd7af51
package
org
.
arch
.
modules
.
base
.
dto
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* oss对象存储
*
* @author admin
* @date 2023/12/05
*/
@ApiModel
(
description
=
"oss对象存储DTO"
)
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
UpLoadDTO
{
/**
* 文件 ID
*/
@ApiModelProperty
(
value
=
"文件ID"
)
private
Long
fileId
;
/**
* 地址
*/
@ApiModelProperty
(
value
=
"地址"
)
private
String
url
;
}
arch-base/src/main/java/org/arch/modules/base/vo/UpLoadVO.java
0 → 100644
View file @
cd7af51
package
org
.
arch
.
modules
.
base
.
vo
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.AllArgsConstructor
;
import
lombok.Data
;
import
lombok.NoArgsConstructor
;
/**
* oss对象存储
*
* @author admin
* @date 2023/12/05
*/
@ApiModel
(
description
=
"oss对象存储"
)
@Data
@AllArgsConstructor
@NoArgsConstructor
public
class
UpLoadVO
{
/**
* 预览地址
*/
@ApiModelProperty
(
value
=
"预览地址"
,
position
=
1
)
private
String
viewUrl
;
/**
* 下载地址
*/
@ApiModelProperty
(
value
=
"下载地址"
,
position
=
2
)
private
String
downLoadUrl
;
/**
* 文件 ID
*/
@ApiModelProperty
(
value
=
"文件 ID"
,
position
=
3
)
private
Long
fileId
;
}
arch-base/src/main/java/org/arch/utils/Constant.java
0 → 100644
View file @
cd7af51
package
org
.
arch
.
utils
;
public
class
Constant
{
/**
* 创建资产根节点标识
*/
public
static
final
String
NO
=
"无"
;
/**
* redis过期时间,以秒为单位,一分钟
*/
public
static
final
int
EXRP_MINUTE
=
60
;
/**
* redis过期时间,以秒为单位,一小时
*/
public
static
final
int
EXRP_HOUR
=
60
*
60
;
/**
* redis过期时间,以秒为单位,一天
*/
public
static
final
int
EXRP_DAY
=
60
*
60
*
24
;
/**
* redis-key-前缀-shiro:cache:
*/
public
static
final
String
PREFIX_SHIRO_CACHE
=
"shiro:cache:"
;
/**
* 用户信息缓存
*/
public
static
final
String
USER_ACCOUNT
=
"user_account:"
;
/**
* redis-key-前缀-shiro:access_token:
*/
public
static
final
String
PREFIX_SHIRO_ACCESS_TOKEN
=
"shiro:access_token:"
;
/**
* redis-key-前缀-shiro:refresh_token:
*/
public
static
final
String
PREFIX_SHIRO_REFRESH_TOKEN
=
"shiro:refresh_token:"
;
/**
* redis-key-前缀-tkv:refresh_token:
*/
public
static
final
String
PREFIX_TKV_REFRESH_TOKEN
=
"tkv:refresh_token:"
;
/**
* JWT-account:
*/
public
static
final
String
ACCOUNT
=
"account"
;
/**
* JWT-currentTimeMillis:
*/
public
static
final
String
CURRENT_TIME_MILLIS
=
"currentTimeMillis"
;
/**
* PASSWORD_MAX_LEN
*/
public
static
final
Integer
PASSWORD_MAX_LEN
=
8
;
//token
public
static
final
int
RESCODE_REFTOKEN_MSG
=
1006
;
//刷新TOKEN(有返回数据)
public
static
final
int
RESCODE_REFTOKEN
=
1007
;
//刷新TOKEN
public
static
final
int
JWT_ERRCODE_NULL
=
4000
;
//Token不存在
public
static
final
int
JWT_ERRCODE_EXPIRE
=
4001
;
//Token过期
public
static
final
int
JWT_ERRCODE_FAIL
=
4002
;
//验证不通过
//密匙
public
static
final
String
JWT_SECRET
=
"8677df7fc87d23u87k61c89s54312hpk"
;
public
static
final
String
TOKEN_ISSUER
=
"IT4IT"
;
//token失效的时间,单位:秒,默认设置3天
public
static
final
Long
ACCESS_TOKEN_EXPIRE
=
7
*
24
*
60
*
60L
;
//accessToken在header中的key
public
static
final
String
ACCESS_TOKEN_HEADER_KEY
=
"accessToken"
;
//用户sessionKey前缀
public
static
final
String
USER_SESSION_KEY
=
"User:Session:key:"
;
//用户令牌前缀
public
static
final
String
JWT_TOKEN_REDIS_KEY_PREFIX
=
"UserAuth:JWT:Key:"
;
//省市区redis key,缓存7天
public
static
final
String
AREA_REDIS_KEY
=
"areaKey"
;
public
static
final
Long
AREA_REDIS_EXPEPIRE
=
7
*
24
*
60
*
60L
;
//一次最多只能两个时段
public
static
final
Integer
EVERY_TIME_MAX_TWO_TIMES
=
2
;
//排队受理业务人均时长,单位:分钟
public
static
final
Integer
LINE_PER_TIMES
=
3
;
//订单到期规定的时间不能取消订单(分钟)
public
static
final
Integer
VALID_EXPIRE_TIME
=
120
;
//演示系统账户
public
static
String
DEMO_ACCOUNT
=
"test"
;
//自动去除表前缀
public
static
String
AUTO_REOMVE_PRE
=
"true"
;
//停止计划任务
public
static
String
STATUS_RUNNING_STOP
=
"stop"
;
//开启计划任务
public
static
String
STATUS_RUNNING_START
=
"start"
;
//通知公告阅读状态-未读
public
static
String
OA_NOTIFY_READ_NO
=
"0"
;
//通知公告阅读状态-已读
public
static
int
OA_NOTIFY_READ_YES
=
1
;
//部门根节点id
public
static
Long
DEPT_ROOT_ID
=
0
l
;
//缓存方式
public
static
String
CACHE_TYPE_REDIS
=
"redis"
;
public
static
String
LOG_ERROR
=
"error"
;
public
static
String
HTTP
=
"http://"
;
/**
* 默认画布信息
*/
public
static
final
String
MX_MODEL_GRAPH
=
"<mxGraphModel dx=\"908\" dy=\"473\" grid=\"1\" gridSize=\"10\" guides=\"1\" tooltips=\"1\" connect=\"1\" arrows=\"1\" fold=\"1\" page=\"1\" pageScale=\"1\" pageWidth=\"827\" pageHeight=\"1169\" math=\"0\" shadow=\"0\">\n"
+
" <root>\n"
+
" <mxCell id=\"0\" />\n"
+
" <mxCell id=\"1\" parent=\"0\" />\n"
+
" </root>\n"
+
"</mxGraphModel>\n"
;
/**
* oss对象存储
*/
public
static
final
String
BUCKET_NAME
=
"com/eadc"
;
/**
* 解析结构类型 1:线状结构;2:包含结构
*/
public
static
final
Integer
STRUCTURE_TYPE_1
=
1
;
/**
* 解析结构类型 1:线状结构;2:包含结构
*/
public
static
final
Integer
STRUCTURE_TYPE_2
=
2
;
/**
* 元模型数据
*/
public
static
final
String
META_MODEL_DATA
=
"meta_model_data"
;
/**
* 架构视图数据
*/
public
static
final
String
ARCHI_VIEW_DATA
=
"archi_view_data"
;
/**
* MX模型缓存key
*/
public
static
final
String
MX_MODEL_KEY
=
"MX_MODEL_KEY"
;
/**
* 业务架构
*/
public
static
final
String
ARCHI_BUSINESS
=
"ARCHI_BUSINESS"
;
/**
* 业务架构
*/
public
static
final
String
ARCHI_APPLICATION
=
"ARCHI_APPLICATION"
;
/**
* 业务架构
*/
public
static
final
String
ARCHI_TECHNOLOGY
=
"ARCHI_TECHNOLOGY"
;
/**
* 业务架构
*/
public
static
final
String
ARCHI_SAFE
=
"ARCHI_SAFE"
;
/**
* 业务架构
*/
public
static
final
String
ARCHI_DATA
=
"ARCHI_DATA"
;
public
static
final
String
WORD_TYPE
=
"application/vnd.openxmlformats-officedocument.wordprocessingml.document"
;
public
static
final
String
IMAGE_TYPE
=
"image/png"
;
}
arch-base/src/main/java/org/arch/utils/FileUtils.java
0 → 100644
View file @
cd7af51
This diff is collapsed.
Click to expand it.
arch-base/src/main/java/org/arch/utils/MD5Utils.java
0 → 100644
View file @
cd7af51
package
org
.
arch
.
utils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.net.util.Base64
;
import
java.nio.charset.StandardCharsets
;
import
java.security.MessageDigest
;
import
java.security.NoSuchAlgorithmException
;
import
java.util.Random
;
public
class
MD5Utils
{
/**
* 获取md5字符串
*/
public
static
String
encrypt
(
String
dataStr
)
{
return
encrypt
(
dataStr
.
getBytes
(
StandardCharsets
.
UTF_8
));
}
public
static
String
encrypt
(
byte
[]
bytes
)
{
try
{
MessageDigest
m
=
MessageDigest
.
getInstance
(
"MD5"
);
m
.
update
(
bytes
);
byte
s
[]
=
m
.
digest
();
String
result
=
""
;
for
(
int
i
=
0
;
i
<
s
.
length
;
i
++)
{
result
+=
Integer
.
toHexString
((
0x000000FF
&
s
[
i
])
|
0xFFFFFF00
).
substring
(
6
);
}
return
result
;
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
StringUtils
.
EMPTY
;
}
public
static
String
key
(
String
u
)
{
Random
random
=
new
Random
();
StringBuilder
sbr
=
new
StringBuilder
();
for
(
int
i
=
0
;
i
<
10
;
i
++)
{
sbr
.
append
(
u
.
charAt
(
random
.
nextInt
(
u
.
length
())));
}
return
sbr
.
toString
();
}
//加盐加密的盐值
private
static
String
saltValue
=
"jiamiDaSHAGua&521^%sB;f"
;
/**
* MD5加密,得到32位字符串
*
* @param strSrc
* @return
*/
public
static
String
encryptStr
(
String
strSrc
)
{
try
{
char
hexChars
[]
=
{
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
,
'a'
,
'b'
,
'c'
,
'd'
,
'e'
,
'f'
};
byte
[]
bytes
=
strSrc
.
getBytes
();
MessageDigest
md
=
MessageDigest
.
getInstance
(
"MD5"
);
md
.
update
(
bytes
);
bytes
=
md
.
digest
();
int
j
=
bytes
.
length
;
char
[]
chars
=
new
char
[
j
*
2
];
int
k
=
0
;
for
(
int
i
=
0
;
i
<
bytes
.
length
;
i
++)
{
byte
b
=
bytes
[
i
];
chars
[
k
++]
=
hexChars
[
b
>>>
4
&
0xf
];
chars
[
k
++]
=
hexChars
[
b
&
0xf
];
}
return
new
String
(
chars
);
}
catch
(
NoSuchAlgorithmException
e
)
{
e
.
printStackTrace
();
throw
new
RuntimeException
(
"MD5加密出错!!+"
+
e
);
}
}
/**
* MD5加密,获得32位字符串(结果和上一个相同)
*
* @param password
* @return
*/
public
static
String
getMD5
(
String
password
)
{
try
{
// 得到一个信息摘要器
MessageDigest
digest
=
MessageDigest
.
getInstance
(
"md5"
);
byte
[]
result
=
digest
.
digest
(
password
.
getBytes
());
StringBuffer
buffer
=
new
StringBuffer
();
// 把每一个byte 做一个与运算 0xff;
for
(
byte
b
:
result
)
{
// 与运算
int
number
=
b
&
0xff
;
// 加盐
String
str
=
Integer
.
toHexString
(
number
);
if
(
str
.
length
()
==
1
)
{
buffer
.
append
(
"0"
);
}
buffer
.
append
(
str
);
}
// 标准的md5加密后的结果
return
buffer
.
toString
();
}
catch
(
NoSuchAlgorithmException
e
)
{
e
.
printStackTrace
();
return
""
;
}
}
/**
* 加盐加密
*
* @param strValue
* @return
* @throws Exception
*/
public
static
String
getMD5Str
(
String
strValue
)
throws
Exception
{
MessageDigest
md5
=
MessageDigest
.
getInstance
(
"MD5"
);
String
newstr
=
Base64
.
encodeBase64String
(
md5
.
digest
((
strValue
+
saltValue
).
getBytes
()));
return
newstr
;
}
}
arch-clouds/attach/src/main/java/org/arch/Main.java
deleted
100644 → 0
View file @
90cf239
package
org
.
arch
;
public
class
Main
{
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
"Hello world!"
);
}
}
\ No newline at end of file
arch-clouds/pom.xml
View file @
cd7af51
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
<modules>
<modules>
<module>
log
</module>
<module>
log
</module>
<module>
office
</module>
<module>
office
</module>
<module>
attach
</module>
<module>
storage
</module>
<module>
mybatis
</module>
<module>
mybatis
</module>
<module>
nacos
</module>
<module>
nacos
</module>
</modules>
</modules>
...
...
arch-clouds/
attach
/pom.xml
→
arch-clouds/
storage
/pom.xml
View file @
cd7af51
...
@@ -10,7 +10,7 @@
...
@@ -10,7 +10,7 @@
</parent>
</parent>
<version>
1.0-SNAPSHOT
</version>
<version>
1.0-SNAPSHOT
</version>
<name>
文件存储
</name>
<name>
文件存储
</name>
<artifactId>
attach
</artifactId>
<artifactId>
storage
</artifactId>
<properties>
<properties>
<maven.compiler.source>
8
</maven.compiler.source>
<maven.compiler.source>
8
</maven.compiler.source>
<maven.compiler.target>
8
</maven.compiler.target>
<maven.compiler.target>
8
</maven.compiler.target>
...
@@ -33,6 +33,16 @@
...
@@ -33,6 +33,16 @@
<groupId>
io.minio
</groupId>
<groupId>
io.minio
</groupId>
<artifactId>
minio
</artifactId>
<artifactId>
minio
</artifactId>
</dependency>
</dependency>
<dependency>
<groupId>
org.arch
</groupId>
<artifactId>
mybatis
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
<dependency>
<groupId>
org.arch
</groupId>
<artifactId>
arch-base
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
</dependencies>
</dependencies>
</project>
</project>
\ No newline at end of file
arch-clouds/storage/src/main/java/org/arch/storage/config/StoreConfiguration.java
0 → 100644
View file @
cd7af51
package
org
.
arch
.
storage
.
config
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.context.annotation.ComponentScan
;
import
org.springframework.context.annotation.Configuration
;
@Slf4j
@Configuration
@ComponentScan
(
"org.arch.storage.config"
)
public
class
StoreConfiguration
{
public
StoreConfiguration
(){
log
.
info
(
"加载StoreConfiguration~~~"
);
}
}
arch-clouds/storage/src/main/java/org/arch/storage/entity/File.java
0 → 100644
View file @
cd7af51
package
org
.
arch
.
storage
.
entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.fasterxml.jackson.databind.annotation.JsonSerialize
;
import
com.fasterxml.jackson.databind.ser.std.ToStringSerializer
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
org.arch.common.entity.BaseEntity
;
import
java.io.Serializable
;
/**
* <p>
* 附件表
* </p>
*
* @author audit
* @since 2020-09-12
*/
@Data
@EqualsAndHashCode
(
callSuper
=
false
)
@TableName
(
"sys_file"
)
@ApiModel
(
value
=
"File对象"
,
description
=
"附件表"
)
public
class
File
extends
BaseEntity
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"唯一主键ID"
)
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
@JsonSerialize
(
using
=
ToStringSerializer
.
class
)
private
Long
id
;
@ApiModelProperty
(
value
=
"原文件名(含拓展名)"
)
private
String
fileName
;
@ApiModelProperty
(
value
=
"文件类型"
)
private
String
fileType
;
@ApiModelProperty
(
value
=
"来源ID(业务ID)"
)
private
String
srcId
;
@ApiModelProperty
(
value
=
"附件功能分类"
)
private
String
typeCode
;
@ApiModelProperty
(
value
=
"组织ID"
)
private
Long
orgId
;
@ApiModelProperty
(
value
=
"服务器端存储文件名"
)
private
String
storeFileName
;
@ApiModelProperty
(
value
=
"附件分类"
)
private
Integer
attribute1
;
@ApiModelProperty
(
value
=
"附件大小(KB)"
)
private
double
attribute2
;
@ApiModelProperty
(
value
=
"弹性扩展字段3"
)
private
String
attribute3
;
@ApiModelProperty
(
value
=
"弹性扩展字段4"
)
private
String
attribute4
;
@ApiModelProperty
(
value
=
"弹性扩展字段5"
)
private
String
attribute5
;
@ApiModelProperty
(
value
=
"版本"
)
private
Long
versionId
;
@ApiModelProperty
(
value
=
"是否储存在oss服务器上0否1是"
)
private
String
isOss
;
@ApiModelProperty
(
value
=
"原ftp文件路径"
)
private
String
ftpStoreFileName
;
@ApiModelProperty
(
value
=
"文件content-type"
)
private
String
contentType
;
@ApiModelProperty
(
value
=
"文件真实地址"
)
private
String
url
;
/**
* 标题
*/
private
String
title
;
/**
* 名字
*/
private
String
name
;
/**
* 后缀
*/
private
String
suffix
;
/**
* 文件大小
*/
private
Long
length
;
/**
* MD5
*/
private
String
md5
;
/**
* 过期时间
*/
private
Long
expiry
;
/**
* 文件唯一标识
*/
private
String
fileKey
;
/**
* 状态
*/
private
Integer
status
;
/**
* 平台
*/
private
String
platform
;
/**
* 基本路径
*/
private
String
basePath
;
}
arch-clouds/storage/src/main/java/org/arch/storage/mapper/FileMapper.java
0 → 100644
View file @
cd7af51
package
org
.
arch
.
storage
.
mapper
;
import
cn.hutool.core.io.FileUtil
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
import
lombok.SneakyThrows
;
import
org.arch.storage.entity.File
;
import
org.arch.utils.MD5Utils
;
import
org.dromara.x.file.storage.core.FileInfo
;
import
org.springframework.web.multipart.MultipartFile
;
/**
* <p>
* 附件表 Mapper 接口
* </p>
*
* @author audit
* @since 2020-09-12
*/
public
interface
FileMapper
extends
BaseMapper
<
File
>
{
@SneakyThrows
default
File
saveFile
(
FileInfo
upload
,
MultipartFile
file
)
{
File
sysFile
=
new
File
();
String
suffix
=
FileUtil
.
getSuffix
(
upload
.
getOriginalFilename
());
String
prefix
=
FileUtil
.
getPrefix
(
upload
.
getOriginalFilename
());
sysFile
.
setFileName
(
upload
.
getOriginalFilename
());
sysFile
.
setContentType
(
upload
.
getContentType
());
sysFile
.
setUrl
(
upload
.
getUrl
());
sysFile
.
setFileType
(
suffix
);
sysFile
.
setSuffix
(
suffix
);
String
encrypt
=
MD5Utils
.
encrypt
(
file
.
getBytes
());
sysFile
.
setMd5
(
encrypt
);
sysFile
.
setFileKey
(
MD5Utils
.
key
(
encrypt
));
sysFile
.
setLength
(
upload
.
getSize
());
sysFile
.
setTitle
(
upload
.
getOriginalFilename
());
sysFile
.
setName
(
prefix
);
sysFile
.
setStoreFileName
(
upload
.
getFilename
());
sysFile
.
setPlatform
(
upload
.
getPlatform
());
sysFile
.
setBasePath
(
upload
.
getBasePath
());
insert
(
sysFile
);
return
sysFile
;
}
}
arch-clouds/storage/src/main/java/org/arch/storage/service/OssService.java
0 → 100644
View file @
cd7af51
package
org
.
arch
.
storage
.
service
;
import
org.arch.modules.base.dto.DelDTO
;
import
org.arch.modules.base.dto.DownloadObjectDTO
;
import
org.arch.modules.base.vo.UpLoadVO
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.servlet.http.HttpServletResponse
;
/**
* oss对象存储管理
*
* @author makejava
* @since 2023-05-04 13:29:23
*/
public
interface
OssService
{
/**
* oss对象存储上传
*
* @param file {@link MultipartFile}
* @return {@link UpLoadVO}
*/
UpLoadVO
upload
(
MultipartFile
file
);
/**
* 下载对象
*/
void
downloadObject
(
DownloadObjectDTO
params
,
HttpServletResponse
response
);
/**
* oss对象存储删除
*
* @param dto 参数
* @return {@link UpLoadVO}
*/
Boolean
delObject
(
DelDTO
dto
);
}
arch-clouds/storage/src/main/java/org/arch/storage/service/impl/FileRecorderImpl.java
0 → 100644
View file @
cd7af51
package
org
.
arch
.
storage
.
service
.
impl
;
import
cn.hutool.core.io.file.FileNameUtil
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
org.arch.storage.entity.File
;
import
org.arch.storage.mapper.FileMapper
;
import
org.dromara.x.file.storage.core.FileInfo
;
import
org.dromara.x.file.storage.core.recorder.FileRecorder
;
import
org.dromara.x.file.storage.core.upload.FilePartInfo
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Component
;
import
java.util.Objects
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
@Component
public
class
FileRecorderImpl
implements
FileRecorder
{
@Autowired
private
FileMapper
fileMapper
;
@Override
public
boolean
save
(
FileInfo
fileInfo
)
{
return
true
;
}
@Override
public
void
update
(
FileInfo
fileInfo
)
{
}
@Override
public
FileInfo
getByUrl
(
String
s
)
{
FileInfo
fileInfo
=
new
FileInfo
();
File
file
=
fileMapper
.
selectOne
(
Wrappers
.
lambdaQuery
(
File
.
class
).
eq
(
File:
:
getUrl
,
s
));
if
(
Objects
.
nonNull
(
file
))
{
fileInfo
.
setPlatform
(
file
.
getPlatform
());
fileInfo
.
setUrl
(
s
);
fileInfo
.
setPath
(
extractDateFromUrl
(
s
)
+
"/"
);
fileInfo
.
setBasePath
(
file
.
getBasePath
());
fileInfo
.
setFilename
(
FileNameUtil
.
getName
(
s
));
}
return
fileInfo
;
}
@Override
public
boolean
delete
(
String
s
)
{
return
true
;
}
@Override
public
void
saveFilePart
(
FilePartInfo
filePartInfo
)
{
}
@Override
public
void
deleteFilePartByUploadId
(
String
s
)
{
}
public
static
String
extractDateFromUrl
(
String
url
)
{
// 使用正则表达式来匹配日期部分
String
regex
=
"/(\\d{4}/\\d{2}/\\d{2})/"
;
Pattern
pattern
=
Pattern
.
compile
(
regex
);
Matcher
matcher
=
pattern
.
matcher
(
url
);
if
(
matcher
.
find
())
{
return
matcher
.
group
(
1
);
}
else
{
return
"Date not found"
;
}
}
}
arch-clouds/storage/src/main/java/org/arch/storage/service/impl/OssServiceImpl.java
0 → 100644
View file @
cd7af51
package
org
.
arch
.
storage
.
service
.
impl
;
import
cn.hutool.core.lang.Assert
;
import
lombok.RequiredArgsConstructor
;
import
lombok.SneakyThrows
;
import
lombok.extern.slf4j.Slf4j
;
import
org.arch.storage.entity.File
;
import
org.arch.modules.base.dto.DelDTO
;
import
org.arch.modules.base.dto.DownloadObjectDTO
;
import
org.arch.modules.base.vo.UpLoadVO
;
import
org.arch.storage.mapper.FileMapper
;
import
org.arch.storage.service.OssService
;
import
org.arch.utils.FileUtils
;
import
org.dromara.x.file.storage.core.Downloader
;
import
org.dromara.x.file.storage.core.FileInfo
;
import
org.dromara.x.file.storage.core.FileStorageService
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.servlet.http.HttpServletResponse
;
import
java.net.URLEncoder
;
import
java.nio.charset.StandardCharsets
;
/**
* oss对象存储管理
*
* @author makejava
* @since 2023-05-04 13:29:24
*/
@Service
@Slf4j
@RequiredArgsConstructor
public
class
OssServiceImpl
implements
OssService
{
private
final
FileMapper
sysFileMapper
;
private
final
FileStorageService
fileStorageService
;
/**
* oss对象存储上传
*
* @param file {@link MultipartFile}
* @return {@link UpLoadVO}
*/
@SneakyThrows
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
UpLoadVO
upload
(
MultipartFile
file
)
{
UpLoadVO
uploadFileVO
=
new
UpLoadVO
();
Assert
.
notNull
(
file
,
"上传文件不能为空"
);
FileInfo
upload
=
fileStorageService
.
of
(
file
)
.
setPath
(
FileUtils
.
filePath
()).
upload
();
Assert
.
notNull
(
uploadFileVO
,
"上传失败"
);
File
saveFile
=
sysFileMapper
.
saveFile
(
upload
,
file
);
uploadFileVO
.
setFileId
(
saveFile
.
getId
());
return
uploadFileVO
;
}
@SneakyThrows
@Override
public
void
downloadObject
(
DownloadObjectDTO
params
,
HttpServletResponse
response
)
{
File
file
=
sysFileMapper
.
selectById
(
params
.
getFileId
());
Assert
.
notNull
(
file
,
"文件不存在"
);
Downloader
download
=
fileStorageService
.
download
(
file
.
getUrl
());
response
.
setContentType
(
file
.
getFileType
());
response
.
setHeader
(
"Content-Disposition"
,
"attachment;filename="
+
URLEncoder
.
encode
(
file
.
getFileName
(),
StandardCharsets
.
UTF_8
.
name
()));
response
.
getOutputStream
().
write
(
download
.
bytes
());
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
Boolean
delObject
(
DelDTO
dto
)
{
boolean
flag
=
false
;
Long
fileId
=
dto
.
getFileId
();
File
file
=
sysFileMapper
.
selectById
(
fileId
);
Assert
.
notNull
(
file
,
"文件不存在"
);
// 判断文件是否存在
FileInfo
fileInfo
=
fileStorageService
.
getFileInfoByUrl
(
file
.
getUrl
());
boolean
exists
=
fileStorageService
.
exists
(
fileInfo
);
Assert
.
isTrue
(
exists
,
"文件不存在"
);
boolean
delete
=
fileStorageService
.
delete
(
fileInfo
);
if
(
delete
)
{
// 删除文件数据表sys_file里的记录信息
int
i
=
this
.
sysFileMapper
.
deleteById
(
file
.
getId
());
if
(
i
>=
0
)
{
flag
=
true
;
}
}
return
flag
;
}
}
arch-clouds/storage/src/main/resources/META-INF/spring.factories
0 → 100644
View file @
cd7af51
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.arch.storage.config.StoreConfiguration
arch-overall/pom.xml
View file @
cd7af51
...
@@ -41,6 +41,11 @@
...
@@ -41,6 +41,11 @@
<artifactId>
arch-base
</artifactId>
<artifactId>
arch-base
</artifactId>
<version>
1.0-SNAPSHOT
</version>
<version>
1.0-SNAPSHOT
</version>
</dependency>
</dependency>
<dependency>
<groupId>
org.arch
</groupId>
<artifactId>
storage
</artifactId>
<version>
1.0-SNAPSHOT
</version>
</dependency>
</dependencies>
</dependencies>
<build>
<build>
...
...
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment