Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
张文彪
/
employmentBusinessPc
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
1ed5c8ba
authored
Dec 16, 2025
by
zwb
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
添加简历头像文件上传
parent
9766577f
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
204 additions
and
3 deletions
employmentBusiness-pc-common/employmentBusiness-pc-common-core/src/main/java/org/dromara/common/core/utils/MD5.java
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/controller/CommController.java
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/service/comm/CommService.java
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/service/comm/impl/CommServiceImpl.java
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/utils/MinioUtils.java
employmentBusiness-pc-common/employmentBusiness-pc-common-core/src/main/java/org/dromara/common/core/utils/MD5.java
0 → 100644
View file @
1ed5c8ba
package
org
.
dromara
.
common
.
core
.
utils
;
import
java.security.MessageDigest
;
import
java.security.NoSuchAlgorithmException
;
public
final
class
MD5
{
public
static
String
encrypt
(
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
);
}
}
public
static
void
main
(
String
[]
args
)
{
String
msg
=
"{\"liveRoomId\":1,\"msgContent\":1,\"msgType\":\"4\",\"timestamp\":1679969941853}"
;
System
.
out
.
println
(
msg
);
msg
=
msg
.
replaceAll
(
"\\\\"
,
""
);
System
.
out
.
println
(
msg
);
System
.
out
.
println
(
MD5
.
encrypt
(
"111111"
));
}
}
\ No newline at end of file
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/controller/CommController.java
0 → 100644
View file @
1ed5c8ba
package
com
.
bkty
.
system
.
controller
;
import
com.alibaba.nacos.common.utils.StringUtils
;
import
com.bkty.system.service.comm.CommService
;
import
io.swagger.v3.oas.annotations.Operation
;
import
io.swagger.v3.oas.annotations.tags.Tag
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.dromara.common.core.domain.R
;
import
org.dromara.common.core.enums.FileTypeEnum
;
import
org.dromara.common.core.exception.WarnException
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.web.multipart.MultipartFile
;
@Slf4j
@RestController
@RequiredArgsConstructor
@RequestMapping
(
value
=
"/comm"
,
method
=
RequestMethod
.
POST
)
@Tag
(
description
=
"comm"
,
name
=
"通用接口"
)
public
class
CommController
{
private
final
CommService
commService
;
/**
* 文件上传返回minio链接
*/
@PostMapping
(
"/fileUpload"
)
public
R
fileUpload
(
@RequestParam
(
"file"
)
MultipartFile
file
)
{
validateFile
(
file
);
return
new
R
<>(
commService
.
fileUpload
(
file
));
}
public
void
validateFile
(
MultipartFile
file
)
{
String
filename
=
file
.
getOriginalFilename
();
if
(
StringUtils
.
isBlank
(
filename
))
{
throw
new
WarnException
(
"文件不能为空"
);
}
String
suffix
=
filename
.
substring
(
filename
.
lastIndexOf
(
'.'
)
+
1
);
long
fileSize
=
file
.
getSize
();
FileTypeEnum
typeEnum
=
getFileTypeEnumBySuffix
(
suffix
.
toLowerCase
());
if
(
typeEnum
==
null
)
{
throw
new
WarnException
(
"不支持的文件类型"
);
}
if
(
typeEnum
.
getMaxSize
()
<
fileSize
)
{
throw
new
WarnException
(
"超过了最大文件大小"
+
":"
+
typeEnum
.
getSizeDescription
());
}
}
public
FileTypeEnum
getFileTypeEnumBySuffix
(
String
suffix
)
{
if
(
StringUtils
.
isBlank
(
suffix
))
{
return
null
;
}
return
FileTypeEnum
.
getEnumBySuffix
(
suffix
);
}
/**
* 上传文件到扣子
*/
// @PostMapping("/agentFileUpload")
// public R agentFileUpload(@RequestParam("file") MultipartFile file) throws Exception {
// validateFile(file);
//
// return new R<>(commService.agentFileUpload(file));
// }
@Operation
(
summary
=
"头像文件上传"
)
@PostMapping
(
"avatarUpload"
)
public
R
<
String
>
avatarUpload
(
@RequestParam
(
"avatarFile"
)
MultipartFile
avatarFile
)
{
String
fileUrl
=
commService
.
avatarUpload
(
avatarFile
);
return
new
R
<>(
fileUrl
);
}
}
\ No newline at end of file
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/service/comm/CommService.java
View file @
1ed5c8ba
...
...
@@ -18,4 +18,11 @@ public interface CommService {
* 上传文件到扣子
*/
String
agentFileUpload
(
byte
[]
fileBytes
,
String
fileName
)
throws
Exception
;
/**
* 头像文件上传
* @param avatarFile
* @return
*/
String
avatarUpload
(
MultipartFile
avatarFile
);
}
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/service/comm/impl/CommServiceImpl.java
View file @
1ed5c8ba
...
...
@@ -6,16 +6,18 @@ import com.alibaba.fastjson2.JSONObject;
import
com.bkty.system.config.MinioProperties
;
import
com.bkty.system.service.comm.CommService
;
import
com.bkty.system.service.coze.CozeApiService
;
import
io.minio.PutObjectArgs
;
import
io.minio.StatObjectArgs
;
import
io.minio.errors.ErrorResponseException
;
import
org.dromara.common.core.constant.Constants
;
import
com.bkty.system.utils.MinioUtils
;
import
lombok.RequiredArgsConstructor
;
import
lombok.extern.slf4j.Slf4j
;
import
org.dromara.common.core.constant.CozeConstsnts
;
import
org.
springframework.beans.factory.annotation.Autowired
;
import
org.
springframework.beans.factory.annotation.Qualifier
;
import
org.
dromara.common.core.exception.WarnException
;
import
org.
dromara.common.core.utils.MD5
;
import
org.springframework.http.HttpHeaders
;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.client.RestTemplate
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.util.UUID
;
...
...
@@ -75,6 +77,46 @@ public class CommServiceImpl implements CommService {
}
return
""
;
}
@Override
public
String
avatarUpload
(
MultipartFile
avatarFile
)
{
try
{
// 1.根据文件对象获取文件的字节数组
byte
[]
bytes
=
avatarFile
.
getBytes
();
// 2.堆文件的字节数组进行MD5处理,保证同一内容的文件在minio中只保存一份
String
bytesToString
=
new
String
(
bytes
);
//用文件内容加密后得到的字符串做文件名前缀
String
prefixEncrypt
=
MD5
.
encrypt
(
bytesToString
);
//截取原文件名的后缀
String
suffix
=
avatarFile
.
getOriginalFilename
().
substring
(
avatarFile
.
getOriginalFilename
().
lastIndexOf
(
"."
),
avatarFile
.
getOriginalFilename
().
length
());
String
objectName
=
"avatar/"
+
prefixEncrypt
+
suffix
;
//3.查询minio的缓存
StatObjectArgs
.
Builder
statBuilder
=
StatObjectArgs
.
builder
();
StatObjectArgs
statObjectArgs
=
statBuilder
.
bucket
(
minioTemplate
.
getBucket
()).
object
(
objectName
).
build
();
//该文件内容相同的对象是否在桶中
try
{
// 尝试获取对象信息,如果存在则直接返回URL(避免重复上传)
minioUtils
.
statObject
(
statObjectArgs
);
return
minioTemplate
.
getUrl
()+
"/"
+
minioTemplate
.
getBucket
()
+
objectName
;
}
catch
(
ErrorResponseException
e
)
{
log
.
info
(
"上传文件不存在,可以上传"
);
}
//4.上传对象到minio桶中
PutObjectArgs
.
Builder
builder
=
PutObjectArgs
.
builder
();
PutObjectArgs
putObjectArgs
=
builder
.
bucket
(
minioTemplate
.
getBucket
()).
object
(
objectName
).
stream
(
avatarFile
.
getInputStream
(),
avatarFile
.
getSize
(),
-
1
).
build
();
minioUtils
.
putObject
(
putObjectArgs
);
log
.
info
(
"上传图片文件到minio成功.."
);
return
minioTemplate
.
getUrl
()+
"/"
+
minioTemplate
.
getBucket
()
+
objectName
;
}
catch
(
Exception
e
)
{
log
.
error
(
"头像上传到minio失败,原因:"
,
e
.
getMessage
());
throw
new
WarnException
(
"头像上传到minio失败"
,
e
);
}
}
}
...
...
employmentBusiness-pc-modules/employmentBusiness-pc-system/src/main/java/com/bkty/system/utils/MinioUtils.java
View file @
1ed5c8ba
...
...
@@ -2,6 +2,7 @@ package com.bkty.system.utils;
import
com.bkty.system.config.MinioProperties
;
import
io.minio.*
;
import
io.minio.errors.*
;
import
io.minio.http.Method
;
import
io.minio.messages.Bucket
;
import
io.minio.messages.DeleteError
;
...
...
@@ -14,8 +15,11 @@ import lombok.extern.slf4j.Slf4j;
import
org.springframework.stereotype.Component
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.nio.file.Paths
;
import
java.security.InvalidKeyException
;
import
java.security.NoSuchAlgorithmException
;
import
java.util.*
;
/**
...
...
@@ -308,4 +312,40 @@ public class MinioUtils {
return
"application/octet-stream"
;
// 默认类型
}
}
/**
* 尝试获取对象信息
* @param args
* @return
* @throws ErrorResponseException
* @throws InsufficientDataException
* @throws InternalException
* @throws InvalidKeyException
* @throws InvalidResponseException
* @throws IOException
* @throws NoSuchAlgorithmException
* @throws ServerException
* @throws XmlParserException
*/
public
StatObjectResponse
statObject
(
StatObjectArgs
args
)
throws
ErrorResponseException
,
InsufficientDataException
,
InternalException
,
InvalidKeyException
,
InvalidResponseException
,
IOException
,
NoSuchAlgorithmException
,
ServerException
,
XmlParserException
{
return
client
.
statObject
(
args
);
}
/**
* 使用文件流上传
* @param args
* @return
* @throws ErrorResponseException
* @throws InsufficientDataException
* @throws InternalException
* @throws InvalidKeyException
* @throws InvalidResponseException
* @throws IOException
* @throws NoSuchAlgorithmException
* @throws ServerException
* @throws XmlParserException
*/
public
ObjectWriteResponse
putObject
(
PutObjectArgs
args
)
throws
ErrorResponseException
,
InsufficientDataException
,
InternalException
,
InvalidKeyException
,
InvalidResponseException
,
IOException
,
NoSuchAlgorithmException
,
ServerException
,
XmlParserException
{
return
client
.
putObject
(
args
);
}
}
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