Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
R
rs-cloud-platform
Project
Project
Details
Activity
Releases
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
周健威
rs-cloud-platform
Commits
d428236b
Commit
d428236b
authored
Jan 13, 2021
by
unset
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/dev' into dev
parents
09215a96
3d728d5a
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
254 additions
and
17 deletions
+254
-17
bootstrap.yml
...ter/rs-datacenter-server/src/main/resources/bootstrap.yml
+4
-0
ImageWatermarkUtil.java
...pyuns/platform/rs/universal/utils/ImageWatermarkUtil.java
+140
-0
UploadController.java
...ns/platform/rs/universal/controller/UploadController.java
+58
-16
UploadService.java
...m/upyuns/platform/rs/universal/service/UploadService.java
+52
-1
No files found.
rs-datacenter/rs-datacenter-server/src/main/resources/bootstrap.yml
View file @
d428236b
...
@@ -9,6 +9,10 @@
...
@@ -9,6 +9,10 @@
# profiles:
# profiles:
# active: dev
# active: dev
spring
:
spring
:
# servlet:
# multipart:
# max-file-size: 3000MB
# max-request-size: 3000MB
profiles
:
profiles
:
active
:
dev
active
:
dev
application
:
application
:
...
...
rs-universal/rs-universal-api/src/main/java/com/upyuns/platform/rs/universal/utils/ImageWatermarkUtil.java
0 → 100644
View file @
d428236b
package
com
.
upyuns
.
platform
.
rs
.
universal
.
utils
;
import
java.awt.AlphaComposite
;
import
java.awt.Color
;
import
java.awt.Font
;
import
java.awt.Graphics2D
;
import
java.awt.Image
;
import
java.awt.RenderingHints
;
import
java.awt.image.BufferedImage
;
import
java.io.*
;
import
javax.imageio.ImageIO
;
/**
*
* @Title ImageWatermarkUtil
* @Description
* @author Zheng.Zeng
* @date 2018年8月29日 下午4:47:38
*/
public
class
ImageWatermarkUtil
{
// 水印透明度
private
static
float
alpha
=
0.5f
;
// 水印文字大小
public
static
final
int
FONT_SIZE
=
28
;
// 水印文字字体
private
static
Font
defaultFont
=
new
Font
(
"微软雅黑"
,
Font
.
BOLD
,
FONT_SIZE
);
// 水印文字颜色
private
static
Color
color
=
Color
.
white
;
// 水印之间的间隔
private
static
final
int
XMOVE
=
80
;
// 水印之间的间隔
private
static
final
int
YMOVE
=
80
;
/**
* 获取文本长度。汉字为1:1,英文和数字为2:1
*/
private
static
int
getTextLength
(
String
text
)
{
int
length
=
text
.
length
();
for
(
int
i
=
0
;
i
<
text
.
length
();
i
++)
{
String
s
=
String
.
valueOf
(
text
.
charAt
(
i
));
if
(
s
.
getBytes
().
length
>
1
)
{
length
++;
}
}
length
=
length
%
2
==
0
?
length
/
2
:
length
/
2
+
1
;
return
length
;
}
/**
* 给图片添加水印文字
*
* @param logoText 水印文字
* @param srcImgPath 源图片路径
* @param targerPath 目标图片路径
*/
public
static
void
ImageByText
(
String
logoText
,
String
srcImgPath
,
String
targerPath
)
throws
IOException
{
Image
srcImg
=
ImageIO
.
read
(
new
File
(
srcImgPath
));
ImageByText
(
logoText
,
srcImg
,
targerPath
,
null
,
null
);
}
/**
* 给图片添加水印文字、可设置水印文字的旋转角度
*
* @param logoText
// * @param srcImgPath
* @param srcImg
* @param targerPath
* @param degree
*/
public
static
void
ImageByText
(
String
logoText
,
Image
srcImg
,
String
targerPath
,
Integer
degree
,
Font
font
)
{
if
(
null
==
font
){
font
=
defaultFont
;
}
InputStream
is
=
null
;
OutputStream
os
=
null
;
try
{
// 源图片
//Image srcImg = ImageIO.read (new File (srcImgPath));
int
width
=
srcImg
.
getWidth
(
null
);
// 原图宽度
int
height
=
srcImg
.
getHeight
(
null
);
// 原图高度
BufferedImage
buffImg
=
new
BufferedImage
(
srcImg
.
getWidth
(
null
),
srcImg
.
getHeight
(
null
),
BufferedImage
.
TYPE_INT_RGB
);
// 得到画笔对象
Graphics2D
g
=
buffImg
.
createGraphics
();
// 设置对线段的锯齿状边缘处理
g
.
setRenderingHint
(
RenderingHints
.
KEY_INTERPOLATION
,
RenderingHints
.
VALUE_INTERPOLATION_BILINEAR
);
g
.
drawImage
(
srcImg
.
getScaledInstance
(
srcImg
.
getWidth
(
null
),
srcImg
.
getHeight
(
null
),
Image
.
SCALE_SMOOTH
),
0
,
0
,
null
);
// 设置水印旋转
if
(
null
!=
degree
)
{
g
.
rotate
(
Math
.
toRadians
(
degree
),
(
double
)
buffImg
.
getWidth
()
/
2
,
(
double
)
buffImg
.
getHeight
()
/
2
);
}
// 设置水印文字颜色
g
.
setColor
(
color
);
// 设置水印文字Font
g
.
setFont
(
font
);
// 设置水印文字透明度
g
.
setComposite
(
AlphaComposite
.
getInstance
(
AlphaComposite
.
SRC_ATOP
,
alpha
));
int
x
=
-
width
/
2
;
int
y
=
-
height
/
2
;
int
markWidth
=
FONT_SIZE
*
getTextLength
(
logoText
);
// 字体长度
int
markHeight
=
FONT_SIZE
;
// 字体高度
// 循环添加水印
while
(
x
<
width
*
1.5
)
{
y
=
-
height
/
2
;
while
(
y
<
height
*
1.5
)
{
g
.
drawString
(
logoText
,
x
,
y
);
y
+=
markHeight
+
YMOVE
;
}
x
+=
markWidth
+
XMOVE
;
}
// 释放资源
g
.
dispose
();
// 生成图片
os
=
new
FileOutputStream
(
targerPath
);
ImageIO
.
write
(
buffImg
,
"JPG"
,
os
);
System
.
out
.
println
(
"添加水印文字成功!"
);
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
finally
{
try
{
if
(
null
!=
is
)
is
.
close
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
try
{
if
(
null
!=
os
)
os
.
close
();
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
}
\ No newline at end of file
rs-universal/rs-universal-server/src/main/java/com/upyuns/platform/rs/universal/controller/UploadController.java
View file @
d428236b
package
com
.
upyuns
.
platform
.
rs
.
universal
.
controller
;
package
com
.
upyuns
.
platform
.
rs
.
universal
.
controller
;
import
cn.hutool.core.img.ImgUtil
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken
;
import
com.github.wxiaoqi.security.auth.client.annotation.IgnoreUserToken
;
import
com.github.wxiaoqi.security.common.msg.ObjectRestResponse
;
import
com.github.wxiaoqi.security.common.msg.ObjectRestResponse
;
...
@@ -14,6 +15,7 @@ import com.upyuns.platform.rs.universal.utils.ImgBase64Util;
...
@@ -14,6 +15,7 @@ import com.upyuns.platform.rs.universal.utils.ImgBase64Util;
import
com.upyuns.platform.rs.universal.utils.PublicMsg
;
import
com.upyuns.platform.rs.universal.utils.PublicMsg
;
import
com.upyuns.platform.rs.universal.vo.Ueditor
;
import
com.upyuns.platform.rs.universal.vo.Ueditor
;
import
io.swagger.annotations.ApiOperation
;
import
io.swagger.annotations.ApiOperation
;
import
lombok.Data
;
import
lombok.extern.slf4j.Slf4j
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.beans.factory.annotation.Autowired
;
...
@@ -22,6 +24,7 @@ import org.springframework.web.bind.annotation.*;
...
@@ -22,6 +24,7 @@ import org.springframework.web.bind.annotation.*;
import
org.springframework.web.multipart.MultipartFile
;
import
org.springframework.web.multipart.MultipartFile
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
java.awt.*
;
import
java.io.File
;
import
java.io.File
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.HashMap
;
...
@@ -45,24 +48,52 @@ public class UploadController{
...
@@ -45,24 +48,52 @@ public class UploadController{
@Autowired
@Autowired
UploadZipService
uploadZipService
;
UploadZipService
uploadZipService
;
private
static
Integer
MAX_DRIVING_LICENSE_SIZE
=
10
*
1024
*
1024
;
//10M
@Data
static
public
class
DisposeDTO
{
private
String
context
=
"人民星云"
;
private
Integer
size
=
36
;
private
Integer
x
=
0
;
private
Integer
y
=
0
;
private
Integer
style
=
Font
.
BOLD
;
private
String
styleName
=
"宋体"
;
private
Float
alpha
=
0.5f
;
private
Float
scaleHight
=
320
f
;
private
Float
scaleWidth
=
360
f
;
private
Color
color
=
Color
.
WHITE
;
private
Integer
colorNum
;
private
Integer
degree
=
-
40
;
public
void
setColorNum
(
Integer
colorNum
)
{
this
.
colorNum
=
colorNum
;
if
(
1
==
colorNum
)
{
this
.
color
=
Color
.
WHITE
;
}
else
if
(
2
==
colorNum
)
{
this
.
color
=
Color
.
BLACK
;
}
else
if
(
3
==
colorNum
)
{
this
.
color
=
Color
.
GRAY
;
}
}
}
@RequestMapping
(
value
=
"/app/unauth/upload"
,
method
=
RequestMethod
.
POST
)
@RequestMapping
(
value
=
"/app/unauth/upload"
,
method
=
RequestMethod
.
POST
)
public
JSONObject
upload
(
public
JSONObject
upload
(
@RequestParam
(
"file"
)
MultipartFile
file
,
@RequestParam
(
"file"
)
MultipartFile
file
,
@RequestParam
(
value
=
"prefix"
,
defaultValue
=
"app"
)
String
prefix
@RequestParam
(
value
=
"prefix"
,
defaultValue
=
"app"
)
String
prefix
)
throws
Exception
{
)
throws
Exception
{
String
contentType
=
file
.
getContentType
();
//图片文件类型
String
contentType
=
file
.
getContentType
();
//图片文件类型
// String fileName = file.getOriginalFilename(); //图片名字
/* if (!contentType.equals("image/jpeg") && !contentType.equals("image/gif")&&!contentType.equals("image/png")) {
return JsonResultUtil.createFailedResult(2001,"格式不对!!!");
}*/
if
(
file
.
getSize
()
>
MAX_DRIVING_LICENSE_SIZE
)
{
return
JsonResultUtil
.
createFailedResult
(
2002
,
"大小超过限制!!!"
);
}
return
JsonResultUtil
.
createSuccessResultWithObj
(
uploadService
.
uploadFile
(
file
,
prefix
));
return
JsonResultUtil
.
createSuccessResultWithObj
(
uploadService
.
uploadFile
(
file
,
prefix
));
}
}
@RequestMapping
(
value
=
"/app/unauth/uploadDispose"
,
method
=
RequestMethod
.
POST
)
public
JSONObject
uploadDispose
(
@RequestParam
(
"file"
)
MultipartFile
file
,
@RequestParam
(
value
=
"prefix"
,
defaultValue
=
"app"
)
String
prefix
,
DisposeDTO
dto
)
throws
Exception
{
String
contentType
=
file
.
getContentType
();
//图片文件类型
return
JsonResultUtil
.
createSuccessResultWithObj
(
uploadService
.
uploadFileDispose
(
file
,
prefix
,
dto
));
}
@ApiOperation
(
"视频上传"
)
@ApiOperation
(
"视频上传"
)
@RequestMapping
(
value
=
"/app/unauth/uploadVideo"
,
method
=
RequestMethod
.
POST
)
@RequestMapping
(
value
=
"/app/unauth/uploadVideo"
,
method
=
RequestMethod
.
POST
)
public
JSONObject
uploadVideo
(
public
JSONObject
uploadVideo
(
...
@@ -72,6 +103,17 @@ public class UploadController{
...
@@ -72,6 +103,17 @@ public class UploadController{
return
JsonResultUtil
.
createSuccessResultWithObj
(
uploadService
.
uploadFile
(
file
,
prefix
));
return
JsonResultUtil
.
createSuccessResultWithObj
(
uploadService
.
uploadFile
(
file
,
prefix
));
}
}
@RequestMapping
(
value
=
"/admin/uploadDispose"
,
method
=
RequestMethod
.
POST
)
public
JSONObject
adminUploadDispose
(
@RequestParam
(
"file"
)
MultipartFile
file
,
@RequestParam
(
value
=
"prefix"
,
defaultValue
=
"app"
)
String
prefix
,
DisposeDTO
dto
)
throws
Exception
{
String
contentType
=
file
.
getContentType
();
//图片文件类型
return
JsonResultUtil
.
createSuccessResultWithObj
(
uploadService
.
uploadFileDispose
(
file
,
prefix
,
dto
));
}
@RequestMapping
(
value
=
"/app/unauth/admin/upload"
,
method
=
RequestMethod
.
POST
)
@RequestMapping
(
value
=
"/app/unauth/admin/upload"
,
method
=
RequestMethod
.
POST
)
public
JSONObject
uploads
(
public
JSONObject
uploads
(
@RequestParam
(
"file"
)
MultipartFile
file
,
@RequestParam
(
"file"
)
MultipartFile
file
,
...
@@ -82,9 +124,9 @@ public class UploadController{
...
@@ -82,9 +124,9 @@ public class UploadController{
/* if (!contentType.equals("image/jpeg") && !contentType.equals("image/gif")&&!contentType.equals("image/png")) {
/* if (!contentType.equals("image/jpeg") && !contentType.equals("image/gif")&&!contentType.equals("image/png")) {
return JsonResultUtil.createFailedResult(2001,"格式不对!!!");
return JsonResultUtil.createFailedResult(2001,"格式不对!!!");
}*/
}*/
if
(
file
.
getSize
()
>
MAX_DRIVING_LICENSE_SIZE
)
{
//
if (file.getSize() > MAX_DRIVING_LICENSE_SIZE) {
return
JsonResultUtil
.
createFailedResult
(
2002
,
"大小超过限制!!!"
);
//
return JsonResultUtil.createFailedResult(2002,"大小超过限制!!!");
}
//
}
return
JsonResultUtil
.
createSuccessResultWithObj
(
uploadService
.
uploadFile
(
file
,
prefix
));
return
JsonResultUtil
.
createSuccessResultWithObj
(
uploadService
.
uploadFile
(
file
,
prefix
));
}
}
...
@@ -106,10 +148,10 @@ public class UploadController{
...
@@ -106,10 +148,10 @@ public class UploadController{
MultipartFile
file
=
files
[
i
];
MultipartFile
file
=
files
[
i
];
//保存文件
//保存文件
String
contentType
=
file
.
getContentType
();
String
contentType
=
file
.
getContentType
();
if
(
file
.
getSize
()
>
MAX_DRIVING_LICENSE_SIZE
)
{
//
if (file.getSize() > MAX_DRIVING_LICENSE_SIZE) {
log
.
error
(
"大小超过限制!!!"
);
//
log.error("大小超过限制!!!");
continue
;
//
continue;
}
//
}
String
path
=
uploadService
.
uploadFile
(
file
,
prefix
);
String
path
=
uploadService
.
uploadFile
(
file
,
prefix
);
if
(
StringUtils
.
isBlank
(
urls
)){
if
(
StringUtils
.
isBlank
(
urls
)){
urls
+=
path
;
urls
+=
path
;
...
...
rs-universal/rs-universal-server/src/main/java/com/upyuns/platform/rs/universal/service/UploadService.java
View file @
d428236b
package
com
.
upyuns
.
platform
.
rs
.
universal
.
service
;
package
com
.
upyuns
.
platform
.
rs
.
universal
.
service
;
import
c
om.github.wxiaoqi.security.common.msg.ObjectRestResponse
;
import
c
n.hutool.core.img.ImgUtil
;
import
com.github.wxiaoqi.security.common.util.process.SystemConfig
;
import
com.github.wxiaoqi.security.common.util.process.SystemConfig
;
import
com.upyuns.platform.rs.universal.constant.RedisKey
;
import
com.upyuns.platform.rs.universal.constant.RedisKey
;
import
com.upyuns.platform.rs.universal.controller.UploadController
;
import
com.upyuns.platform.rs.universal.utils.ImageWatermarkUtil
;
import
com.upyuns.platform.rs.universal.utils.ImgBase64Util
;
import
com.upyuns.platform.rs.universal.utils.ImgBase64Util
;
import
org.apache.commons.io.FileUtils
;
import
org.apache.commons.io.FileUtils
;
import
org.joda.time.DateTime
;
import
org.joda.time.DateTime
;
...
@@ -19,6 +21,8 @@ import org.springframework.http.ResponseEntity;
...
@@ -19,6 +21,8 @@ import org.springframework.http.ResponseEntity;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
org.springframework.web.multipart.MultipartFile
;
import
org.springframework.web.multipart.MultipartFile
;
import
java.awt.*
;
import
java.awt.image.BufferedImage
;
import
java.io.File
;
import
java.io.File
;
import
java.util.UUID
;
import
java.util.UUID
;
import
java.util.concurrent.TimeUnit
;
import
java.util.concurrent.TimeUnit
;
...
@@ -61,6 +65,53 @@ public class UploadService {
...
@@ -61,6 +65,53 @@ public class UploadService {
return
realFileRelPath
;
return
realFileRelPath
;
}
}
/**
* 写入上传文件,返回相对路径
* @param file
* @return
*/
public
String
uploadFileDispose
(
MultipartFile
file
,
String
prefix
,
UploadController
.
DisposeDTO
dto
)
throws
Exception
{
//创建本日存放目录
DateTime
now
=
DateTime
.
now
();
String
dirPathToday
=
"/"
+
prefix
+
"/"
+
now
.
toString
(
DEFAULT_DATE_TIME_FORMATTER
);
String
redisNoKey
=
RedisKey
.
UPLOAD_FILE_NO_PREFIX
+
now
.
toString
(
DEFAULT_DATE_TIME_FORMATTER
);
Long
no
=
redisTemplate
.
opsForValue
().
increment
(
redisNoKey
);
if
(
no
.
equals
(
1
l
)){
redisTemplate
.
expire
(
redisNoKey
,
1
,
TimeUnit
.
DAYS
);
}
String
fileName
=
file
.
getOriginalFilename
();
String
realFileRelPath
=
dirPathToday
+
"/"
+
no
+
fileName
.
substring
(
fileName
.
lastIndexOf
(
"."
));
//文件存放路径
String
filePath
=
baseUploadPath
+
realFileRelPath
;
//缩略
BufferedImage
bufferedImage
=
ImgUtil
.
read
(
file
.
getInputStream
());
Image
newImage
=
null
;
if
(
bufferedImage
.
getHeight
()
>
dto
.
getScaleHight
()
&&
bufferedImage
.
getWidth
()
>
dto
.
getScaleWidth
())
{
Float
scale
=
1.0f
;
if
(
bufferedImage
.
getHeight
()
<
bufferedImage
.
getWidth
())
{
scale
=
dto
.
getScaleHight
()
/
bufferedImage
.
getHeight
();
}
else
{
scale
=
dto
.
getScaleWidth
()
/
bufferedImage
.
getWidth
();
}
newImage
=
ImgUtil
.
scale
(
bufferedImage
,
scale
);
}
else
{
newImage
=
bufferedImage
;
}
//加水印
Font
font
=
new
Font
(
dto
.
getStyleName
(),
dto
.
getStyle
(),
dto
.
getSize
());
//Image newImage2 = ImgUtil.pressText(newImage, dto.getContext(), dto.getColor(), font, dto.getX(), dto.getY(), dto.getAlpha());
//将文件写入指定位置
//ImgUtil.write(newImage2, new File(filePath));
ImageWatermarkUtil
.
ImageByText
(
dto
.
getContext
(),
newImage
,
filePath
,
dto
.
getDegree
(),
font
);
//将文件写入指定位置
//FileUtils.copyInputStreamToFile(file.getInputStream(), new File(filePath));
realFileRelPath
=
xx_url
+
SystemConfig
.
XXMP_URL
+
realFileRelPath
;
return
realFileRelPath
;
}
/**
/**
* 写入上传文件,返回相对路径
* 写入上传文件,返回相对路径
* @param imgFile
* @param imgFile
...
...
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