Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
datax-cloud
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
黄营
datax-cloud
Commits
f2afa283
Commit
f2afa283
authored
Apr 29, 2020
by
yuwei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
2.0.0项目初始化
parent
d56575fe
Hide whitespace changes
Inline
Side-by-side
Showing
27 changed files
with
439 additions
and
156 deletions
+439
-156
datax-service-file-dev.yml
...nfig/src/main/resources/config/datax-service-file-dev.yml
+18
-13
pom.xml
...y-service-parent/data-factory-service-sql-console/pom.xml
+0
-5
pom.xml
.../data-factory-service-parent/data-factory-service/pom.xml
+0
-5
pom.xml
...arket-service-parent/data-market-service-api-call/pom.xml
+0
-5
pom.xml
...es/data-market-service-parent/data-market-service/pom.xml
+0
-5
pom.xml
datax-modules/file-service-parent/file-service-api/pom.xml
+15
-0
FileDto.java
.../src/main/java/cn/datax/service/file/api/dto/FileDto.java
+11
-0
FileEntity.java
...ain/java/cn/datax/service/file/api/entity/FileEntity.java
+5
-0
FileQuery.java
.../main/java/cn/datax/service/file/api/query/FileQuery.java
+14
-0
FileVo.java
...pi/src/main/java/cn/datax/service/file/api/vo/FileVo.java
+24
-0
pom.xml
datax-modules/file-service-parent/file-service/pom.xml
+5
-12
DataxFileApplication.java
...main/java/cn/datax/service/file/DataxFileApplication.java
+2
-0
AliyunOSSAutoConfig.java
...ava/cn/datax/service/file/config/AliyunOSSAutoConfig.java
+15
-4
DataResourceServerConfig.java
...n/datax/service/file/config/DataResourceServerConfig.java
+67
-0
FastdfsAutoConfig.java
.../java/cn/datax/service/file/config/FastdfsAutoConfig.java
+0
-55
FileUploadConfig.java
...n/java/cn/datax/service/file/config/FileUploadConfig.java
+25
-0
LocalFileAutoConfig.java
...ava/cn/datax/service/file/config/LocalFileAutoConfig.java
+24
-2
QiniuOSSAutoConfig.java
...java/cn/datax/service/file/config/QiniuOSSAutoConfig.java
+10
-12
SwaggerConfig.java
...main/java/cn/datax/service/file/config/SwaggerConfig.java
+104
-0
FileController.java
...java/cn/datax/service/file/controller/FileController.java
+57
-6
FileMapper.java
...main/java/cn/datax/service/file/mapstruct/FileMapper.java
+20
-0
FdfsProperties.java
...java/cn/datax/service/file/properties/FdfsProperties.java
+0
-11
FileServerProperties.java
...n/datax/service/file/properties/FileServerProperties.java
+1
-7
LocalProperties.java
...ava/cn/datax/service/file/properties/LocalProperties.java
+1
-1
OssProperties.java
.../java/cn/datax/service/file/properties/OssProperties.java
+3
-7
FileServiceImpl.java
...a/cn/datax/service/file/service/impl/FileServiceImpl.java
+16
-5
FileMapper.xml
...ent/file-service/src/main/resources/mapper/FileMapper.xml
+2
-1
No files found.
datax-config/src/main/resources/config/datax-service-file-dev.yml
View file @
f2afa283
# 数据源配置
spring
:
redis
:
database
:
1
host
:
127.0.0.1
port
:
6379
password
:
# 密码(默认为空)
timeout
:
6000ms
# 连接超时时长(毫秒)
lettuce
:
pool
:
max-active
:
1000
# 连接池最大连接数(使用负值表示没有限制)
max-wait
:
-1ms
# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle
:
10
# 连接池中的最大空闲连接
min-idle
:
5
# 连接池中的最小空闲连接
datasource
:
dynamic
:
type
:
com.zaxxer.hikari.HikariDataSource
...
...
@@ -70,17 +82,10 @@ data:
#oss配置
oss
:
access-key
:
tpi8mObnfzZi4ggBX8Bw7zydjoTQ0WeML3RkPKsX
accessKeySecret
:
HZBXmSyUTy-haYp0KbBTtsil-GoKjVS2kDKT8Yow
endpoint
:
http://pkqtmn0p1.bkt.clouddn.com
bucketName
:
public-oss
domain
:
access-key-secret
:
HZBXmSyUTy-haYp0KbBTtsil-GoKjVS2kDKT8Yow
bucket-name
:
public-oss
domain-name
:
http://pkqtmn0p1.bkt.clouddn.com
#local配置
local
:
path
:
"
D:/uploadfile"
prefix
:
"
fileView"
#fastDFS配置
#fdfs:
# soTimeout: 1500
# connectTimeout: 600
# trackerList: ${data.fdfs.trackerList}
\ No newline at end of file
path
:
"
F:
\\
uploadfile"
prefix
:
"
fileView"
\ No newline at end of file
datax-modules/data-factory-service-parent/data-factory-service-sql-console/pom.xml
View file @
f2afa283
...
...
@@ -72,11 +72,6 @@
</dependency>
<dependency>
<groupId>
cn.datax
</groupId>
<artifactId>
system-service-api
</artifactId>
<version>
2.0.0
</version>
</dependency>
<dependency>
<groupId>
cn.datax
</groupId>
<artifactId>
data-factory-service-api
</artifactId>
<version>
2.0.0
</version>
</dependency>
...
...
datax-modules/data-factory-service-parent/data-factory-service/pom.xml
View file @
f2afa283
...
...
@@ -71,11 +71,6 @@
</dependency>
<dependency>
<groupId>
cn.datax
</groupId>
<artifactId>
system-service-api
</artifactId>
<version>
2.0.0
</version>
</dependency>
<dependency>
<groupId>
cn.datax
</groupId>
<artifactId>
data-factory-service-api
</artifactId>
<version>
2.0.0
</version>
</dependency>
...
...
datax-modules/data-market-service-parent/data-market-service-api-call/pom.xml
View file @
f2afa283
...
...
@@ -72,11 +72,6 @@
</dependency>
<dependency>
<groupId>
cn.datax
</groupId>
<artifactId>
system-service-api
</artifactId>
<version>
2.0.0
</version>
</dependency>
<dependency>
<groupId>
cn.datax
</groupId>
<artifactId>
data-factory-service-api
</artifactId>
<version>
2.0.0
</version>
</dependency>
...
...
datax-modules/data-market-service-parent/data-market-service/pom.xml
View file @
f2afa283
...
...
@@ -71,11 +71,6 @@
</dependency>
<dependency>
<groupId>
cn.datax
</groupId>
<artifactId>
system-service-api
</artifactId>
<version>
2.0.0
</version>
</dependency>
<dependency>
<groupId>
cn.datax
</groupId>
<artifactId>
data-market-service-api
</artifactId>
<version>
2.0.0
</version>
</dependency>
...
...
datax-modules/file-service-parent/file-service-api/pom.xml
View file @
f2afa283
...
...
@@ -12,6 +12,21 @@
<artifactId>
file-service-api
</artifactId>
<dependencies>
<dependency>
<groupId>
io.springfox
</groupId>
<artifactId>
springfox-swagger2
</artifactId>
<version>
${swagger2.version}
</version>
</dependency>
<dependency>
<groupId>
io.springfox
</groupId>
<artifactId>
springfox-bean-validators
</artifactId>
<version>
${swagger2.version}
</version>
</dependency>
<dependency>
<groupId>
io.springfox
</groupId>
<artifactId>
springfox-swagger-ui
</artifactId>
<version>
${swagger2.version}
</version>
</dependency>
<!--feign 依赖-->
<dependency>
<groupId>
io.github.openfeign
</groupId>
...
...
datax-modules/file-service-parent/file-service-api/src/main/java/cn/datax/service/file/api/dto/FileDto.java
0 → 100644
View file @
f2afa283
package
cn
.
datax
.
service
.
file
.
api
.
dto
;
import
lombok.Data
;
import
java.io.Serializable
;
@Data
public
class
FileDto
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
}
datax-modules/file-service-parent/file-service-api/src/main/java/cn/datax/service/file/api/entity/FileEntity.java
View file @
f2afa283
...
...
@@ -23,6 +23,11 @@ public class FileEntity extends BaseEntity {
private
static
final
long
serialVersionUID
=
1L
;
/**
* 文件原始名称
*/
private
String
originalFilename
;
/**
* 文件名称
*/
private
String
fileName
;
...
...
datax-modules/file-service-parent/file-service-api/src/main/java/cn/datax/service/file/api/query/FileQuery.java
0 → 100644
View file @
f2afa283
package
cn
.
datax
.
service
.
file
.
api
.
query
;
import
cn.datax.common.base.BaseQueryParams
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
public
class
FileQuery
extends
BaseQueryParams
{
private
static
final
long
serialVersionUID
=
1L
;
private
String
fileName
;
}
datax-modules/file-service-parent/file-service-api/src/main/java/cn/datax/service/file/api/vo/FileVo.java
0 → 100644
View file @
f2afa283
package
cn
.
datax
.
service
.
file
.
api
.
vo
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
@Data
public
class
FileVo
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
private
String
id
;
private
Integer
status
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
LocalDateTime
createTime
;
private
String
originalFilename
;
private
String
fileName
;
private
Long
fileSize
;
private
String
filePath
;
private
String
contentType
;
private
String
fileType
;
}
datax-modules/file-service-parent/file-service/pom.xml
View file @
f2afa283
...
...
@@ -51,16 +51,6 @@
<version>
${fastdfs-client.version}
</version>
</dependency>
<dependency>
<groupId>
io.springfox
</groupId>
<artifactId>
springfox-swagger2
</artifactId>
<version>
${swagger2.version}
</version>
</dependency>
<dependency>
<groupId>
io.springfox
</groupId>
<artifactId>
springfox-swagger-ui
</artifactId>
<version>
${swagger2.version}
</version>
</dependency>
<dependency>
<groupId>
org.mapstruct
</groupId>
<artifactId>
mapstruct
</artifactId>
<version>
${mapstruct.version}
</version>
...
...
@@ -79,6 +69,11 @@
</dependency>
<dependency>
<groupId>
cn.datax
</groupId>
<artifactId>
datax-common-redis
</artifactId>
<version>
2.0.0
</version>
</dependency>
<dependency>
<groupId>
cn.datax
</groupId>
<artifactId>
datax-common-security
</artifactId>
<version>
2.0.0
</version>
</dependency>
...
...
@@ -102,5 +97,4 @@
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
datax-modules/file-service-parent/file-service/src/main/java/cn/datax/service/file/DataxFileApplication.java
View file @
f2afa283
...
...
@@ -2,7 +2,9 @@ package cn.datax.service.file;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
import
org.springframework.cloud.openfeign.EnableFeignClients
;
@EnableFeignClients
(
basePackages
=
{
"cn.datax.service.system.api.feign"
})
@SpringBootApplication
public
class
DataxFileApplication
{
...
...
datax-modules/file-service-parent/file-service/src/main/java/cn/datax/service/file/config/AliyunOSSAutoConfig.java
View file @
f2afa283
package
cn
.
datax
.
service
.
file
.
config
;
import
cn.datax.common.utils.ThrowableUtil
;
import
cn.datax.service.file.api.entity.FileEntity
;
import
cn.datax.service.file.properties.FileServerProperties
;
import
cn.datax.service.file.service.impl.FileServiceImpl
;
import
com.aliyun.oss.ClientConfiguration
;
import
com.aliyun.oss.common.auth.DefaultCredentialProvider
;
import
com.aliyun.oss.model.PutObjectRequest
;
import
com.aliyun.oss.model.PutObjectResult
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.context.annotation.Bean
;
...
...
@@ -15,6 +19,7 @@ import com.aliyun.oss.OSSClient;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.io.File
;
import
java.io.IOException
;
/**
...
...
@@ -24,6 +29,8 @@ import java.io.IOException;
@ConditionalOnProperty
(
name
=
"data.file-server.type"
,
havingValue
=
"aliyun"
)
public
class
AliyunOSSAutoConfig
{
private
final
Logger
logger
=
LoggerFactory
.
getLogger
(
AliyunOSSAutoConfig
.
class
);
@Autowired
private
FileServerProperties
fileProperties
;
...
...
@@ -33,7 +40,7 @@ public class AliyunOSSAutoConfig {
*/
@Bean
public
OSSClient
ossClient
()
{
OSSClient
ossClient
=
new
OSSClient
(
fileProperties
.
getOss
().
get
Endpoint
()
OSSClient
ossClient
=
new
OSSClient
(
fileProperties
.
getOss
().
get
DomainName
()
,
new
DefaultCredentialProvider
(
fileProperties
.
getOss
().
getAccessKey
(),
fileProperties
.
getOss
().
getAccessKeySecret
())
,
new
ClientConfiguration
());
return
ossClient
;
...
...
@@ -52,12 +59,16 @@ public class AliyunOSSAutoConfig {
@Override
protected
void
uploadFile
(
MultipartFile
file
,
FileEntity
fileEntity
)
{
try
{
PutObjectResult
result
=
ossClient
.
putObject
(
fileProperties
.
getOss
().
getBucketName
(),
fileEntity
.
getFileName
(),
file
.
getInputStream
());
PutObjectRequest
putObjectRequest
=
new
PutObjectRequest
(
fileProperties
.
getOss
().
getBucketName
(),
fileEntity
.
getFileName
(),
file
.
getInputStream
());
PutObjectResult
result
=
ossClient
.
putObject
(
putObjectRequest
);
if
(
result
.
getResponse
().
getStatusCode
()
==
200
){
fileEntity
.
setFilePath
(
fileProperties
.
getOss
().
getDomain
()
+
"/"
+
fileEntity
.
getFileName
());
fileEntity
.
setFilePath
(
fileProperties
.
getOss
().
getDomain
Name
()
+
File
.
separator
+
fileEntity
.
getFileName
());
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
logger
.
error
(
"全局异常信息ex={}, StackTrace={}"
,
e
.
getMessage
(),
ThrowableUtil
.
getStackTrace
(
e
));
}
finally
{
// 关闭OSSClient
ossClient
.
shutdown
();
}
}
...
...
datax-modules/file-service-parent/file-service/src/main/java/cn/datax/service/file/config/DataResourceServerConfig.java
0 → 100644
View file @
f2afa283
package
cn
.
datax
.
service
.
file
.
config
;
import
cn.datax.common.security.handler.DataAccessDeniedHandler
;
import
cn.datax.common.security.handler.DataAuthExceptionEntryPoint
;
import
cn.datax.common.security.utils.DataRedisTokenServices
;
import
cn.datax.common.security.utils.RedisTokenStore
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.data.redis.connection.RedisConnectionFactory
;
import
org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity
;
import
org.springframework.security.config.annotation.web.builders.HttpSecurity
;
import
org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer
;
import
org.springframework.security.oauth2.config.annotation.web.configuration.ResourceServerConfigurerAdapter
;
import
org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer
;
import
org.springframework.security.oauth2.provider.token.TokenStore
;
@Configuration
@EnableResourceServer
@EnableGlobalMethodSecurity
(
prePostEnabled
=
true
)
public
class
DataResourceServerConfig
extends
ResourceServerConfigurerAdapter
{
@Autowired
private
DataAccessDeniedHandler
accessDeniedHandler
;
@Autowired
private
DataAuthExceptionEntryPoint
exceptionEntryPoint
;
@Autowired
private
RedisConnectionFactory
redisConnectionFactory
;
@Bean
public
TokenStore
redisTokenStore
()
{
return
new
RedisTokenStore
(
redisConnectionFactory
);
}
@Override
public
void
configure
(
ResourceServerSecurityConfigurer
resources
)
{
DataRedisTokenServices
dataTokenServices
=
new
DataRedisTokenServices
();
dataTokenServices
.
setTokenStore
(
redisTokenStore
());
resources
.
tokenStore
(
redisTokenStore
())
.
tokenServices
(
dataTokenServices
)
.
authenticationEntryPoint
(
exceptionEntryPoint
)
.
accessDeniedHandler
(
accessDeniedHandler
);
}
@Override
public
void
configure
(
HttpSecurity
http
)
throws
Exception
{
//允许使用iframe 嵌套,避免swagger-ui 不被加载的问题
http
.
headers
().
frameOptions
().
disable
();
http
.
authorizeRequests
()
.
antMatchers
(
"/actuator/**"
,
"/v2/api-docs/**"
,
"/swagger-ui.html"
,
"/doc.html"
,
"/swagger-resources/**"
,
"/webjars/**"
,
// feign 内部调用不用授权
"/inner/**"
).
permitAll
()
.
anyRequest
().
authenticated
()
.
and
().
csrf
().
disable
();
}
}
datax-modules/file-service-parent/file-service/src/main/java/cn/datax/service/file/config/FastdfsAutoConfig.java
deleted
100644 → 0
View file @
d56575fe
package
cn
.
datax
.
service
.
file
.
config
;
import
cn.datax.service.file.api.entity.FileEntity
;
import
cn.datax.service.file.properties.FileServerProperties
;
import
cn.datax.service.file.service.impl.FileServiceImpl
;
import
com.github.tobato.fastdfs.domain.fdfs.StorePath
;
import
com.github.tobato.fastdfs.service.FastFileStorageClient
;
import
org.apache.commons.io.FilenameUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.io.IOException
;
/**
* FastDFS配置
*/
@Configuration
@ConditionalOnProperty
(
name
=
"data.file-server.type"
,
havingValue
=
"fastdfs"
)
public
class
FastdfsAutoConfig
{
@Autowired
private
FileServerProperties
fileProperties
;
@Service
public
class
FastdfsServiceImpl
extends
FileServiceImpl
{
@Autowired
private
FastFileStorageClient
storageClient
;
@Override
protected
String
fileType
()
{
return
fileProperties
.
getType
();
}
@Override
protected
void
uploadFile
(
MultipartFile
file
,
FileEntity
fileEntity
)
{
StorePath
storePath
=
null
;
try
{
storePath
=
storageClient
.
uploadFile
(
file
.
getInputStream
(),
file
.
getSize
(),
FilenameUtils
.
getExtension
(
file
.
getOriginalFilename
()),
null
);
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
// fileEntity.setFilePath("http://" + fileProperties.getFdfs().getWebUrl() + "/" + storePath.getFullPath());
fileEntity
.
setFilePath
(
storePath
.
getFullPath
());
}
@Override
protected
void
deleteFile
(
FileEntity
fileEntity
)
{
StorePath
storePath
=
StorePath
.
parseFromUrl
(
fileEntity
.
getFilePath
());
storageClient
.
deleteFile
(
storePath
.
getGroup
(),
storePath
.
getPath
());
}
}
}
datax-modules/file-service-parent/file-service/src/main/java/cn/datax/service/file/config/FileUploadConfig.java
0 → 100644
View file @
f2afa283
package
cn
.
datax
.
service
.
file
.
config
;
import
org.springframework.boot.web.servlet.MultipartConfigFactory
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.util.unit.DataSize
;
import
javax.servlet.MultipartConfigElement
;
/**
* 文件上传大小设置
*/
@Configuration
public
class
FileUploadConfig
{
@Bean
public
MultipartConfigElement
multipartConfigElement
()
{
MultipartConfigFactory
factory
=
new
MultipartConfigFactory
();
// 单个文件大小200mb
factory
.
setMaxFileSize
(
DataSize
.
ofMegabytes
(
200L
));
// 设置总上传数据大小1GB
factory
.
setMaxRequestSize
(
DataSize
.
ofGigabytes
(
1L
));
return
factory
.
createMultipartConfig
();
}
}
datax-modules/file-service-parent/file-service/src/main/java/cn/datax/service/file/config/LocalFileAutoConfig.java
View file @
f2afa283
package
cn
.
datax
.
service
.
file
.
config
;
import
java.io.File
;
import
java.io.IOException
;
import
cn.datax.common.utils.ThrowableUtil
;
import
cn.datax.service.file.api.entity.FileEntity
;
import
cn.datax.service.file.properties.FileServerProperties
;
import
cn.datax.service.file.service.impl.FileServiceImpl
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.context.annotation.Bean
;
...
...
@@ -22,6 +26,8 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@ConditionalOnProperty
(
name
=
"data.file-server.type"
,
havingValue
=
"local"
)
public
class
LocalFileAutoConfig
{
private
final
Logger
logger
=
LoggerFactory
.
getLogger
(
LocalFileAutoConfig
.
class
);
@Autowired
private
FileServerProperties
fileProperties
;
...
...
@@ -49,12 +55,28 @@ public class LocalFileAutoConfig {
@Override
protected
void
uploadFile
(
MultipartFile
file
,
FileEntity
fileEntity
)
{
String
localPath
=
fileProperties
.
getLocal
().
getPath
();
File
parentFile
=
new
File
(
localPath
);
if
(!
parentFile
.
exists
())
{
if
(!
parentFile
.
mkdirs
())
{
throw
new
RuntimeException
(
"创建保存路径失败"
);
}
}
fileEntity
.
setFilePath
(
localPath
+
File
.
separator
+
fileEntity
.
getFileName
());
File
dest
=
new
File
(
localPath
+
File
.
separator
+
fileEntity
.
getFileName
());
try
{
file
.
transferTo
(
dest
);
}
catch
(
IOException
e
)
{
logger
.
error
(
"全局异常信息ex={}, StackTrace={}"
,
e
.
getMessage
(),
ThrowableUtil
.
getStackTrace
(
e
));
}
}
@Override
protected
void
deleteFile
(
FileEntity
fileEntity
)
{
File
file
=
new
File
(
fileEntity
.
getFilePath
());
if
(
file
.
exists
())
{
file
.
delete
();
}
}
}
}
datax-modules/file-service-parent/file-service/src/main/java/cn/datax/service/file/config/QiniuOSSAutoConfig.java
View file @
f2afa283
package
cn
.
datax
.
service
.
file
.
config
;
import
cn.datax.common.utils.ThrowableUtil
;
import
cn.datax.service.file.api.entity.FileEntity
;
import
cn.datax.service.file.properties.FileServerProperties
;
import
cn.datax.service.file.service.impl.FileServiceImpl
;
import
com.qiniu.common.QiniuException
;
import
com.qiniu.http.Response
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.context.annotation.Bean
;
...
...
@@ -17,6 +20,7 @@ import com.qiniu.util.Auth;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.io.File
;
import
java.io.IOException
;
/**
...
...
@@ -26,6 +30,8 @@ import java.io.IOException;
@ConditionalOnProperty
(
name
=
"data.file-server.type"
,
havingValue
=
"qiniu"
)
public
class
QiniuOSSAutoConfig
{
private
final
Logger
logger
=
LoggerFactory
.
getLogger
(
QiniuOSSAutoConfig
.
class
);
@Autowired
private
FileServerProperties
fileProperties
;
...
...
@@ -81,28 +87,20 @@ public class QiniuOSSAutoConfig {
protected
void
uploadFile
(
MultipartFile
file
,
FileEntity
fileEntity
)
{
try
{
Response
response
=
uploadManager
.
put
(
file
.
getBytes
(),
fileEntity
.
getFileName
(),
auth
.
uploadToken
(
fileProperties
.
getOss
().
getBucketName
()));
int
retry
=
0
;
while
(
response
.
needRetry
()
&&
retry
++
<
3
)
{
response
=
uploadManager
.
put
(
file
.
getBytes
(),
fileEntity
.
getFileName
(),
auth
.
uploadToken
(
fileProperties
.
getOss
().
getBucketName
()));
}
if
(
response
.
statusCode
==
200
)
{
fileEntity
.
setFilePath
(
fileProperties
.
getOss
().
get
Endpoint
()
+
"/"
+
fileEntity
.
getFileName
());
fileEntity
.
setFilePath
(
fileProperties
.
getOss
().
get
DomainName
()
+
File
.
separator
+
fileEntity
.
getFileName
());
}
}
catch
(
IOException
e
)
{
e
.
printStackTrace
(
);
logger
.
error
(
"全局异常信息ex={}, StackTrace={}"
,
e
.
getMessage
(),
ThrowableUtil
.
getStackTrace
(
e
)
);
}
}
@Override
protected
void
deleteFile
(
FileEntity
fileEntity
)
{
try
{
Response
response
=
bucketManager
.
delete
(
fileProperties
.
getOss
().
getBucketName
(),
fileEntity
.
getFilePath
());
int
retry
=
0
;
while
(
response
.
needRetry
()
&&
retry
++
<
3
)
{
response
=
bucketManager
.
delete
(
fileProperties
.
getOss
().
getBucketName
(),
fileEntity
.
getFilePath
());
}
Response
response
=
bucketManager
.
delete
(
fileProperties
.
getOss
().
getBucketName
(),
fileEntity
.
getFileName
());
}
catch
(
QiniuException
e
)
{
e
.
printStackTrace
(
);
logger
.
error
(
"全局异常信息ex={}, StackTrace={}"
,
e
.
getMessage
(),
ThrowableUtil
.
getStackTrace
(
e
)
);
}
}
}
...
...
datax-modules/file-service-parent/file-service/src/main/java/cn/datax/service/file/config/SwaggerConfig.java
0 → 100644
View file @
f2afa283
package
cn
.
datax
.
service
.
file
.
config
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
springfox.documentation.builders.*
;
import
springfox.documentation.schema.ModelRef
;
import
springfox.documentation.service.ApiInfo
;
import
springfox.documentation.service.ApiKey
;
import
springfox.documentation.service.Parameter
;
import
springfox.documentation.service.ResponseMessage
;
import
springfox.documentation.spi.DocumentationType
;
import
springfox.documentation.spring.web.plugins.Docket
;
import
springfox.documentation.swagger2.annotations.EnableSwagger2
;
import
java.util.ArrayList
;
import
java.util.List
;
@Configuration
@EnableSwagger2
public
class
SwaggerConfig
{
/**
* 创建API应用
* apiInfo() 增加API相关信息
* 通过select()函数返回一个ApiSelectorBuilder实例,用来控制哪些接口暴露给Swagger来展现,
* 本例采用指定扫描的包路径来定义指定要建立API的目录。
*
* @return
*/
@Bean
public
Docket
createRestApi
(){
//版本类型是swagger2
return
new
Docket
(
DocumentationType
.
SWAGGER_2
)
//通过调用自定义方法apiInfo,获得文档的主要信息
.
apiInfo
(
apiInfo
())
//设置全局参数
.
globalOperationParameters
(
globalParamBuilder
())
//设置全局响应参数
.
globalResponseMessage
(
RequestMethod
.
GET
,
responseBuilder
())
.
globalResponseMessage
(
RequestMethod
.
POST
,
responseBuilder
())
.
globalResponseMessage
(
RequestMethod
.
PUT
,
responseBuilder
())
.
globalResponseMessage
(
RequestMethod
.
DELETE
,
responseBuilder
())
.
select
()
.
apis
(
RequestHandlerSelectors
.
basePackage
(
"cn.datax.service.file.controller"
))
//扫描该包下面的API注解
.
paths
(
PathSelectors
.
any
())
.
build
()
//设置安全认证
.
securitySchemes
(
security
());
}
/**
* 创建该API的基本信息(这些基本信息会展现在文档页面中)
* 访问地址:http://项目实际地址/swagger-ui.html
* @return
*/
private
ApiInfo
apiInfo
()
{
return
new
ApiInfoBuilder
()
.
title
(
"系统管理中心"
)
//接口管理文档首页显示
.
description
(
"系统管理中心接口文档"
)
//API的描述
.
version
(
"1.0"
)
.
build
();
}
/**
* 安全认证参数
* @return
*/
private
List
<
ApiKey
>
security
()
{
List
<
ApiKey
>
apiKeys
=
new
ArrayList
<>();
apiKeys
.
add
(
new
ApiKey
(
"Authorization"
,
"Authorization"
,
"header"
));
return
apiKeys
;
}
/**
* 构建全局参数列表
* @return
*/
private
List
<
Parameter
>
globalParamBuilder
(){
List
<
Parameter
>
pars
=
new
ArrayList
<>();
pars
.
add
(
parameterBuilder
(
"Authorization"
,
"令牌"
,
"string"
,
"header"
,
false
).
build
());
return
pars
;
}
/**
* 创建参数
* @return
*/
private
ParameterBuilder
parameterBuilder
(
String
name
,
String
desc
,
String
type
,
String
parameterType
,
boolean
required
)
{
ParameterBuilder
tokenPar
=
new
ParameterBuilder
();
tokenPar
.
name
(
name
).
description
(
desc
).
modelRef
(
new
ModelRef
(
type
)).
parameterType
(
parameterType
).
required
(
required
).
build
();
return
tokenPar
;
}
/**
* 创建全局响应值
* @return
*/
private
List
<
ResponseMessage
>
responseBuilder
()
{
List
<
ResponseMessage
>
responseMessageList
=
new
ArrayList
<>();
responseMessageList
.
add
(
new
ResponseMessageBuilder
().
code
(
200
).
message
(
"响应成功"
).
build
());
responseMessageList
.
add
(
new
ResponseMessageBuilder
().
code
(
500
).
message
(
"服务器内部错误"
).
build
());
return
responseMessageList
;
}
}
datax-modules/file-service-parent/file-service/src/main/java/cn/datax/service/file/controller/FileController.java
View file @
f2afa283
package
cn
.
datax
.
service
.
file
.
controller
;
import
cn.datax.common.core.JsonPage
;
import
cn.datax.common.core.R
;
import
cn.datax.service.file.api.entity.FileEntity
;
import
cn.datax.service.file.api.query.FileQuery
;
import
cn.datax.service.file.api.vo.FileVo
;
import
cn.datax.service.file.mapstruct.FileMapper
;
import
cn.datax.service.file.service.FileService
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
cn.datax.common.base.BaseController
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* <p>
* 前端控制器
...
...
@@ -19,34 +31,73 @@ import org.springframework.web.multipart.MultipartFile;
* @author yuwei
* @since 2019-09-17
*/
@Api
(
tags
=
{
"文件管理"
})
@RestController
@RequestMapping
(
"/file"
)
@RequestMapping
(
"/file
s
"
)
public
class
FileController
extends
BaseController
{
@Autowired
private
FileService
fileService
;
@Autowired
private
FileMapper
fileMapper
;
/**
* 通过ID查询信息
*
* @param id
* @return
*/
@ApiOperation
(
value
=
"获取详细信息"
,
notes
=
"根据url的id来获取详细信息"
)
@ApiImplicitParam
(
name
=
"id"
,
value
=
"ID"
,
required
=
true
,
dataType
=
"String"
,
paramType
=
"path"
)
@GetMapping
(
"/{id}"
)
public
R
getFileById
(
@PathVariable
String
id
)
{
return
R
.
ok
().
setData
(
fileService
.
getById
(
id
));
}
/**
* 分页查询信息
*
* @param fileQuery
* @return
*/
@ApiOperation
(
value
=
"分页查询"
,
notes
=
""
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"fileQuery"
,
value
=
"查询实体fileQuery"
,
required
=
true
,
dataTypeClass
=
FileQuery
.
class
)
})
@GetMapping
(
"/page"
)
public
R
getFilePage
(
Page
page
,
FileEntity
file
)
{
return
R
.
ok
().
setData
(
fileService
.
page
(
page
,
Wrappers
.
query
(
file
)));
public
R
getFilePage
(
FileQuery
fileQuery
)
{
QueryWrapper
<
FileEntity
>
queryWrapper
=
new
QueryWrapper
<>();
IPage
<
FileEntity
>
page
=
fileService
.
page
(
new
Page
<>(
fileQuery
.
getPageNum
(),
fileQuery
.
getPageSize
()),
queryWrapper
);
List
<
FileVo
>
collect
=
page
.
getRecords
().
stream
().
map
(
fileMapper:
:
toVO
).
collect
(
Collectors
.
toList
());
JsonPage
<
FileVo
>
jsonPage
=
new
JsonPage
<>(
page
.
getCurrent
(),
page
.
getSize
(),
page
.
getTotal
(),
collect
);
return
R
.
ok
().
setData
(
jsonPage
);
}
/**
* 附件上传
* @param file
* @return
*/
@ApiOperation
(
value
=
"附件上传"
)
@ApiImplicitParam
(
name
=
"file"
,
value
=
"附件file"
,
required
=
true
,
dataTypeClass
=
MultipartFile
.
class
)
@PostMapping
(
"/upload"
)
public
R
upload
(
@RequestParam
(
"file"
)
MultipartFile
file
)
{
fileService
.
uploadFile
(
file
);
return
R
.
ok
();
}
/**
* 删除
* @param id
* @return
*/
@ApiOperation
(
value
=
"删除"
,
notes
=
"根据url的id来指定删除对象"
)
@ApiImplicitParam
(
name
=
"id"
,
value
=
"ID"
,
required
=
true
,
dataType
=
"String"
,
paramType
=
"path"
)
@DeleteMapping
(
"/{id}"
)
public
R
deleteFile
(
@PathVariable
String
id
)
{
public
R
deleteFile
ById
(
@PathVariable
String
id
)
{
fileService
.
deleteFileById
(
id
);
return
R
.
ok
();
}
}
datax-modules/file-service-parent/file-service/src/main/java/cn/datax/service/file/mapstruct/FileMapper.java
0 → 100644
View file @
f2afa283
package
cn
.
datax
.
service
.
file
.
mapstruct
;
import
cn.datax.common.mapstruct.EntityMapper
;
import
cn.datax.service.file.api.dto.FileDto
;
import
cn.datax.service.file.api.entity.FileEntity
;
import
cn.datax.service.file.api.vo.FileVo
;
import
org.mapstruct.Mapper
;
/**
* <p>
* 数据集信息表 Mapper 实体映射
* </p>
*
* @author yuwei
* @since 2020-03-20
*/
@Mapper
(
componentModel
=
"spring"
)
public
interface
FileMapper
extends
EntityMapper
<
FileDto
,
FileEntity
,
FileVo
>
{
}
datax-modules/file-service-parent/file-service/src/main/java/cn/datax/service/file/properties/FdfsProperties.java
deleted
100644 → 0
View file @
d56575fe
package
cn
.
datax
.
service
.
file
.
properties
;
import
lombok.Data
;
@Data
public
class
FdfsProperties
{
/**
* fastdfs的http访问地址
*/
private
String
webUrl
;
}
datax-modules/file-service-parent/file-service/src/main/java/cn/datax/service/file/properties/FileServerProperties.java
View file @
f2afa283
...
...
@@ -13,9 +13,8 @@ import org.springframework.context.annotation.Configuration;
public
class
FileServerProperties
{
/**
* 为以下4个值,指定不同的自动化配置
* qiniu:七牛oss
* qiniu:七牛
云
oss
* aliyun:阿里云oss
* fastdfs:本地部署的fastDFS
* local:本地盘符部署
*/
private
String
type
;
...
...
@@ -26,11 +25,6 @@ public class FileServerProperties {
OssProperties
oss
=
new
OssProperties
();
/**
* fastDFS配置
*/
FdfsProperties
fdfs
=
new
FdfsProperties
();
/**
* local配置
*/
LocalProperties
local
=
new
LocalProperties
();
...
...
datax-modules/file-service-parent/file-service/src/main/java/cn/datax/service/file/properties/LocalProperties.java
View file @
f2afa283
...
...
@@ -9,7 +9,7 @@ public class LocalProperties {
*/
private
String
path
;
/**
* url前缀
* url
访问
前缀
*/
private
String
prefix
;
}
datax-modules/file-service-parent/file-service/src/main/java/cn/datax/service/file/properties/OssProperties.java
View file @
f2afa283
...
...
@@ -13,15 +13,11 @@ public class OssProperties {
*/
private
String
accessKeySecret
;
/**
* 端点
*/
private
String
endpoint
;
/**
* bucket名称
* 存储空间名称
*/
private
String
bucketName
;
/**
*
说明
*
对象存储绑定的访问主机域名
*/
private
String
domain
;
private
String
domain
Name
;
}
datax-modules/file-service-parent/file-service/src/main/java/cn/datax/service/file/service/impl/FileServiceImpl.java
View file @
f2afa283
...
...
@@ -4,11 +4,16 @@ import cn.datax.service.file.api.entity.FileEntity;
import
cn.datax.service.file.dao.FileDao
;
import
cn.datax.service.file.service.FileService
;
import
cn.datax.common.base.BaseServiceImpl
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.io.FileUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Transactional
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.util.Date
;
/**
* <p>
* 服务实现类
...
...
@@ -21,25 +26,32 @@ import org.springframework.web.multipart.MultipartFile;
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
public
abstract
class
FileServiceImpl
extends
BaseServiceImpl
<
FileDao
,
FileEntity
>
implements
FileService
{
@Autowired
private
FileDao
fileDao
;
@Override
public
FileEntity
uploadFile
(
MultipartFile
file
)
{
FileEntity
fileEntity
=
new
FileEntity
();
fileEntity
.
setContentType
(
file
.
getContentType
())
.
set
FileN
ame
(
file
.
getOriginalFilename
())
.
set
OriginalFilen
ame
(
file
.
getOriginalFilename
())
.
setFileSize
(
file
.
getSize
());
String
nowDate
=
DateUtil
.
format
(
new
Date
(),
"yyyyMMddHHmmss"
);
String
extName
=
FileUtil
.
extName
(
fileEntity
.
getOriginalFilename
());
String
fileName
=
nowDate
+
"."
+
extName
;
fileEntity
.
setFileName
(
fileName
);
uploadFile
(
file
,
fileEntity
);
// 设置文件来源
fileEntity
.
setFileType
(
fileType
());
// 将文件信息保存到数据库
baseMapper
.
insert
(
fileEntity
);
fileDao
.
insert
(
fileEntity
);
return
fileEntity
;
}
@Override
public
void
deleteFileById
(
String
id
)
{
FileEntity
fileEntity
=
baseMapper
.
selectById
(
id
);
FileEntity
fileEntity
=
fileDao
.
selectById
(
id
);
if
(
fileEntity
!=
null
)
{
baseMapper
.
deleteById
(
fileEntity
.
getId
());
fileDao
.
deleteById
(
fileEntity
.
getId
());
deleteFile
(
fileEntity
);
}
}
...
...
@@ -66,5 +78,4 @@ public abstract class FileServiceImpl extends BaseServiceImpl<FileDao, FileEntit
* @return
*/
protected
abstract
void
deleteFile
(
FileEntity
fileEntity
);
}
datax-modules/file-service-parent/file-service/src/main/resources/mapper/FileMapper.xml
View file @
f2afa283
...
...
@@ -10,6 +10,7 @@
<result
column=
"create_time"
property=
"createTime"
/>
<result
column=
"update_by"
property=
"updateBy"
/>
<result
column=
"update_time"
property=
"updateTime"
/>
<result
column=
"original_filename"
property=
"originalFilename"
/>
<result
column=
"file_name"
property=
"fileName"
/>
<result
column=
"file_size"
property=
"fileSize"
/>
<result
column=
"file_path"
property=
"filePath"
/>
...
...
@@ -25,7 +26,7 @@
create_time,
update_by,
update_time,
file_name, file_size, file_path, content_type, file_type
original_filename,
file_name, file_size, file_path, content_type, file_type
</sql>
</mapper>
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
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 comment