Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
C
cust-api
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
李伟
cust-api
Commits
679952c7
Commit
679952c7
authored
Dec 29, 2024
by
罗林杰
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
98929816
70288619
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
647 additions
and
4 deletions
+647
-4
pom.xml
pom.xml
+6
-0
AppMemInfoController.java
...isoft/app/appMemInfo/controller/AppMemInfoController.java
+80
-4
WxMiniCons.java
src/main/java/org/rcisoft/app/login/cons/WxMiniCons.java
+53
-0
WxMiniAppController.java
...org/rcisoft/app/login/controller/WxMiniAppController.java
+71
-0
WxMiniService.java
...ain/java/org/rcisoft/app/login/service/WxMiniService.java
+42
-0
WxMiniServiceImpl.java
...org/rcisoft/app/login/service/impl/WxMiniServiceImpl.java
+395
-0
No files found.
pom.xml
View file @
679952c7
...
@@ -152,6 +152,12 @@
...
@@ -152,6 +152,12 @@
<version>
4.2
</version>
<version>
4.2
</version>
</dependency>
</dependency>
<dependency>
<groupId>
com.drewnoakes
</groupId>
<artifactId>
metadata-extractor
</artifactId>
<version>
2.14.0
</version>
</dependency>
</dependencies>
</dependencies>
...
...
src/main/java/org/rcisoft/app/appMemInfo/controller/AppMemInfoController.java
View file @
679952c7
...
@@ -4,6 +4,9 @@ package org.rcisoft.app.appMemInfo.controller;
...
@@ -4,6 +4,9 @@ package org.rcisoft.app.appMemInfo.controller;
/*固定导入*/
/*固定导入*/
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.drew.imaging.ImageMetadataReader
;
import
com.drew.metadata.Metadata
;
import
com.drew.metadata.exif.ExifIFD0Directory
;
import
io.swagger.v3.oas.annotations.Operation
;
import
io.swagger.v3.oas.annotations.Operation
;
import
io.swagger.v3.oas.annotations.Parameter
;
import
io.swagger.v3.oas.annotations.Parameter
;
import
io.swagger.v3.oas.annotations.Parameters
;
import
io.swagger.v3.oas.annotations.Parameters
;
...
@@ -36,6 +39,7 @@ import org.springframework.web.multipart.MultipartFile;
...
@@ -36,6 +39,7 @@ import org.springframework.web.multipart.MultipartFile;
import
javax.imageio.ImageIO
;
import
javax.imageio.ImageIO
;
import
javax.validation.Valid
;
import
javax.validation.Valid
;
import
java.awt.*
;
import
java.awt.image.BufferedImage
;
import
java.awt.image.BufferedImage
;
import
java.io.ByteArrayOutputStream
;
import
java.io.ByteArrayOutputStream
;
import
java.io.IOException
;
import
java.io.IOException
;
...
@@ -136,24 +140,28 @@ public class AppMemInfoController extends CyPaginationController<MemInfo> {
...
@@ -136,24 +140,28 @@ public class AppMemInfoController extends CyPaginationController<MemInfo> {
cyFileStorageService
.
filePath
(
file
,
temp
,
bucket
));
cyFileStorageService
.
filePath
(
file
,
temp
,
bucket
));
}
}
//图片压缩
private
static
MultipartFile
compressImage
(
MultipartFile
file
)
{
private
static
MultipartFile
compressImage
(
MultipartFile
file
)
{
BufferedImage
image
=
null
;
BufferedImage
image
=
null
;
try
{
try
{
image
=
ImageIO
.
read
(
file
.
getInputStream
());
image
=
ImageIO
.
read
(
file
.
getInputStream
());
// 设置压缩质量
// 获取图像的方向信息并进行旋转调整
float
quality
=
1.0f
;
image
=
fixImageOrientation
(
file
,
image
);
// // 设置压缩质量
// float quality = 1.0f;
// 调整图片尺寸,设置目标宽度和高度
// 调整图片尺寸,设置目标宽度和高度
int
targetWidth
=
800
;
// 目标宽度(可以根据需求调整)
int
targetWidth
=
800
;
// 目标宽度(可以根据需求调整)
int
targetHeight
=
600
;
// 目标高度(可以根据需求调整)
int
targetHeight
=
600
;
// 目标高度(可以根据需求调整)
// 使用Imgscalr进行图像压缩(缩放)
// 使用Imgscalr进行图像压缩(缩放)
BufferedImage
compressedImage
=
Scalr
.
resize
(
image
,
Scalr
.
Method
.
QUALITY
,
targetWidth
,
targetHeight
);
// BufferedImage compressedImage = Scalr.resize(image,Scalr.Method.QUALITY, Scalr.Mode.AUTOMATIC,500
);
// 将BufferedImage写入ByteArrayOutputStream
// 将BufferedImage写入ByteArrayOutputStream
ByteArrayOutputStream
outputStream
=
new
ByteArrayOutputStream
();
ByteArrayOutputStream
outputStream
=
new
ByteArrayOutputStream
();
String
originalFilename
=
file
.
getOriginalFilename
();
String
originalFilename
=
file
.
getOriginalFilename
();
String
extension
=
originalFilename
.
substring
(
originalFilename
.
lastIndexOf
(
'.'
)
+
1
).
toLowerCase
();
String
extension
=
originalFilename
.
substring
(
originalFilename
.
lastIndexOf
(
'.'
)
+
1
).
toLowerCase
();
ImageIO
.
write
(
compressedImage
,
extension
,
outputStream
);
// 假设原始图片格式为jpg
ImageIO
.
write
(
image
,
extension
,
outputStream
);
// 假设原始图片格式为jpg
// 将压缩后的图片数据转换为byte数组
// 将压缩后的图片数据转换为byte数组
byte
[]
compressedImageData
=
outputStream
.
toByteArray
();
byte
[]
compressedImageData
=
outputStream
.
toByteArray
();
...
@@ -167,4 +175,72 @@ public class AppMemInfoController extends CyPaginationController<MemInfo> {
...
@@ -167,4 +175,72 @@ public class AppMemInfoController extends CyPaginationController<MemInfo> {
return
file
;
return
file
;
}
}
/**
* 获取图像的 EXIF 方向标签
*/
private
static
int
getExifOrientation
(
MultipartFile
file
)
{
try
{
Metadata
metadata
=
ImageMetadataReader
.
readMetadata
(
file
.
getInputStream
());
ExifIFD0Directory
directory
=
metadata
.
getFirstDirectoryOfType
(
ExifIFD0Directory
.
class
);
if
(
directory
!=
null
)
{
Integer
orientationTag
=
directory
.
getInteger
(
ExifIFD0Directory
.
TAG_ORIENTATION
);
if
(
orientationTag
!=
null
)
{
return
orientationTag
;
}
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
return
1
;
// 默认方向,无旋转
}
/**
* 旋转图像
*/
private
static
BufferedImage
rotateImage
(
BufferedImage
image
,
int
angle
)
{
int
width
=
image
.
getWidth
();
int
height
=
image
.
getHeight
();
// 计算旋转后的新宽高
double
radians
=
Math
.
toRadians
(
angle
);
int
newWidth
=
(
int
)
Math
.
abs
(
width
*
Math
.
cos
(
radians
))
+
(
int
)
Math
.
abs
(
height
*
Math
.
sin
(
radians
));
int
newHeight
=
(
int
)
Math
.
abs
(
height
*
Math
.
cos
(
radians
))
+
(
int
)
Math
.
abs
(
width
*
Math
.
sin
(
radians
));
// 创建一个新的图像,背景色为白色或透明
BufferedImage
rotatedImage
=
new
BufferedImage
(
newWidth
,
newHeight
,
image
.
getType
());
Graphics2D
g2d
=
rotatedImage
.
createGraphics
();
// g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
// g2d.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
//
// // 设置旋转中心
g2d
.
translate
((
newWidth
-
width
)
/
2
,
(
newHeight
-
height
)
/
2
);
// 居中
// g2d.rotate(radians, width / 2, height / 2); // 旋转
g2d
.
rotate
(
radians
,
width
/
2
,
height
/
2
);
// 绘制原图像
g2d
.
drawImage
(
image
,
0
,
0
,
null
);
g2d
.
dispose
();
return
rotatedImage
;
}
/**
* 根据 EXIF 信息修正图像方向
*/
private
static
BufferedImage
fixImageOrientation
(
MultipartFile
file
,
BufferedImage
image
)
throws
IOException
{
int
orientation
=
getExifOrientation
(
file
);
switch
(
orientation
)
{
case
3
:
return
rotateImage
(
image
,
180
);
case
6
:
return
rotateImage
(
image
,
90
);
case
8
:
return
rotateImage
(
image
,
270
);
default
:
return
image
;
// 无需旋转
}
}
}
}
src/main/java/org/rcisoft/app/login/cons/WxMiniCons.java
0 → 100644
View file @
679952c7
package
org
.
rcisoft
.
app
.
login
.
cons
;
/**
* Created with family.
* author: cy
* Date: 2021/5/10
* Time: 4:15 PM
* description:
*/
public
class
WxMiniCons
{
// 微信获取 openid
public
static
final
String
LOGIN_URL
=
"https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code"
;
// map - code码
public
static
final
String
CODE
=
"code"
;
// map - user对象
public
static
final
String
DATA
=
"data"
;
// map - token
public
static
final
String
TOKEN
=
"token"
;
// map - openId
public
static
final
String
OPEN_ID
=
"openId"
;
// 已登录,已授权 1
public
static
final
Integer
CODE_AUTHOR
=
200
;
// 已登录,未授权 0.5
public
static
final
Integer
CODE_LOGIN
=
202
;
// 异常 -1
public
static
final
Integer
CODE_ERROR
=
500
;
// 未登录 0
public
static
final
Integer
CODE_UNLOGIN
=
204
;
//微信接口
public
static
final
String
OPEN_ID_STR
=
"openid"
;
public
static
final
String
SESSION_KEY_STR
=
"session_key"
;
//redis openid
public
static
final
String
REDIS_OPENID_STR
=
"users:sk:"
;
// 解密phone str
public
static
final
String
PHONE_STR
=
"phoneNumber"
;
//操作提示
public
static
final
String
OPE_PHONE_ERROR
=
"获取手机号错误,请稍后重试"
;
public
static
final
String
OPE_PHONE_EXIST
=
"您的手机号被占用,请联系客服"
;
public
static
final
String
OPE_PHONE_NOT_EXIST
=
"您的手机号,系统不存在,请联系客服"
;
public
static
final
String
OPE_PROFILE_NOT_LOGIN
=
"用户未登录,请先登录"
;
}
src/main/java/org/rcisoft/app/login/controller/WxMiniAppController.java
0 → 100644
View file @
679952c7
package
org
.
rcisoft
.
app
.
login
.
controller
;
import
jakarta.servlet.http.HttpServletRequest
;
import
lombok.extern.slf4j.Slf4j
;
import
org.rcisoft.app.login.service.WxMiniService
;
import
org.rcisoft.core.jwt.util.CyJwtUtil
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.web.bind.annotation.*
;
import
java.util.Map
;
/**
* @author cy
* Created by cy on 21/5/10.
* @descript
*/
@RestController
@RequestMapping
(
"/app/wxMiniApp"
)
@Slf4j
public
class
WxMiniAppController
{
@Autowired
private
WxMiniService
wxMiniServiceImpl
;
@Autowired
private
CyJwtUtil
cyJwtUtil
;
/**
* wx login 第一步
* 1. 小程序刚进入的时候,可能会有token
* 2. 手机号登录,之前调用的
*
* @param code code
* @return
*/
@GetMapping
(
"/validLogin"
)
public
Map
<
String
,
Object
>
validLogin
(
@RequestParam
(
"code"
)
String
code
,
HttpServletRequest
request
)
{
// 1. 已经登录 ----> 延长登录过期时间 30分钟,返回token 和 基本信息(身份)
return
wxMiniServiceImpl
.
validLogin
(
code
,
cyJwtUtil
.
getToken
(
request
));
}
/**
* 手机号登录 第二步
*
* @return
*/
@GetMapping
(
"/phoneLogin"
)
public
Map
<
String
,
Object
>
phoneLogin
(
@RequestParam
(
"encryptedData"
)
String
encryptedData
,
@RequestParam
(
"iv"
)
String
iv
,
@RequestParam
(
"openId"
)
String
openId
)
{
return
wxMiniServiceImpl
.
phoneLogin
(
encryptedData
,
iv
,
openId
);
}
/**
* 保存授权信息 第三步
*
* @return
*/
@PostMapping
(
"/saveUserProfile"
)
public
Map
<
String
,
Object
>
saveUserProfile
(
HttpServletRequest
request
,
@RequestParam
(
"nickName"
)
String
nickName
,
@RequestParam
(
"avatarUrl"
)
String
avatarUrl
,
@RequestParam
(
"gender"
)
String
gender
,
@RequestParam
(
"address"
)
String
address
)
{
return
wxMiniServiceImpl
.
saveUserProfile
(
nickName
,
avatarUrl
,
gender
,
address
,
cyJwtUtil
.
getToken
(
request
));
}
}
src/main/java/org/rcisoft/app/login/service/WxMiniService.java
0 → 100644
View file @
679952c7
package
org
.
rcisoft
.
app
.
login
.
service
;
import
java.util.Map
;
/**
* Created with family.
* author: cy
* Date: 2021/5/10
* Time: 3:41 PM
* description:
*/
public
interface
WxMiniService
{
/**
* 验证登录
*
* @param code
* @return
*/
Map
<
String
,
Object
>
validLogin
(
String
code
,
String
token
);
/**
* 手机登录
*
* @param encryptedData
* @param iv
* @param openId
* @return
*/
Map
<
String
,
Object
>
phoneLogin
(
String
encryptedData
,
String
iv
,
String
openId
);
/**
* 保存profile
*
* @param nickName
* @param avatarUrl
* @param gender
* @param address
* @return
*/
Map
<
String
,
Object
>
saveUserProfile
(
String
nickName
,
String
avatarUrl
,
String
gender
,
String
address
,
String
token
);
}
src/main/java/org/rcisoft/app/login/service/impl/WxMiniServiceImpl.java
0 → 100644
View file @
679952c7
This diff is collapsed.
Click to expand it.
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