Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
legobackend
/
lego-manage
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
bac28589
authored
2026-04-18 09:50:15 +0800
by
chentao
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
新增阿里云vod功能
1 parent
81e626a2
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
202 additions
and
3 deletions
lego-admin/src/main/java/com/lego/web/controller/core/UpgradeController.java
lego-admin/src/main/java/com/lego/web/controller/system/SysOssController.java
lego-admin/src/main/resources/application.properties
lego-oss/pom.xml
lego-oss/src/main/java/com/lego/oss/config/AppConfig.java
lego-system/src/main/java/com/lego/system/domain/SysOss.java
lego-system/src/main/java/com/lego/system/domain/vo/SysOssVo.java
lego-system/src/main/java/com/lego/system/service/ISysOssService.java
lego-system/src/main/java/com/lego/system/service/impl/SysOssServiceImpl.java
lego-admin/src/main/java/com/lego/web/controller/core/UpgradeController.java
View file @
bac2858
...
...
@@ -66,6 +66,19 @@ public class UpgradeController extends BaseController {
}
}
@GetMapping
(
"/v2/list"
)
public
R
<
String
>
list_v2
()
{
try
{
ResourceVo
resourceVo
=
service
.
list
();
ObjectMapper
objectMapper
=
new
ObjectMapper
();
String
json
=
objectMapper
.
writeValueAsString
(
resourceVo
);
return
R
.
ok
(
MessageUtils
.
message
(
"system.success"
),
EncryptUtils
.
encryptByAes
(
json
));
}
catch
(
Exception
e
){
return
R
.
fail
();
}
}
@GetMapping
(
"/list1"
)
public
R
<
ResourceVo
>
list1
()
{
try
{
...
...
lego-admin/src/main/java/com/lego/web/controller/system/SysOssController.java
View file @
bac2858
...
...
@@ -2,7 +2,11 @@ package com.lego.web.controller.system;
import
cn.dev33.satoken.annotation.SaCheckPermission
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
com.aliyun.vod.upload.impl.UploadVideoImpl
;
import
com.aliyun.vod.upload.req.UploadStreamRequest
;
import
com.aliyun.vod.upload.resp.UploadStreamResponse
;
import
com.lego.common.annotation.Log
;
import
com.lego.common.core.controller.BaseController
;
import
com.lego.common.core.domain.PageQuery
;
...
...
@@ -10,10 +14,16 @@ import com.lego.common.core.domain.R;
import
com.lego.common.core.page.TableDataInfo
;
import
com.lego.common.core.validate.QueryGroup
;
import
com.lego.common.enums.BusinessType
;
import
com.lego.common.utils.EncryptUtils
;
import
com.lego.common.utils.StringUtils
;
import
com.lego.oss.config.AppConfig
;
import
com.lego.system.domain.SysOss
;
import
com.lego.system.domain.bo.SysOssBo
;
import
com.lego.system.domain.vo.SysOssVo
;
import
com.lego.system.mapper.SysOssMapper
;
import
com.lego.system.service.ISysOssService
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.http.MediaType
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
...
...
@@ -21,7 +31,11 @@ import org.springframework.web.multipart.MultipartFile;
import
javax.servlet.http.HttpServletResponse
;
import
javax.validation.constraints.NotEmpty
;
import
java.io.ByteArrayInputStream
;
import
java.io.ByteArrayOutputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.net.URL
;
import
java.util.Arrays
;
import
java.util.HashMap
;
import
java.util.List
;
...
...
@@ -39,6 +53,9 @@ import java.util.Map;
public
class
SysOssController
extends
BaseController
{
private
final
ISysOssService
iSysOssService
;
private
final
SysOssMapper
baseMapper
;
@Autowired
public
AppConfig
config
;
/**
* 查询OSS对象存储列表
...
...
@@ -83,6 +100,79 @@ public class SysOssController extends BaseController {
}
/**
* 同步Oss至阿里云
*
*/
@GetMapping
(
"/sync"
)
public
R
<
String
>
sync
()
{
List
<
SysOssVo
>
list
=
iSysOssService
.
list
();
String
accessKeyId
=
config
.
getAliyunAccessKeyId
();
String
accessKeySecret
=
config
.
getAliyunAccessKeySecret
();
for
(
SysOssVo
vo
:
list
){
if
(
StringUtils
.
isBlank
(
vo
.
getVideoId
()))
{
if
(
".mp4"
.
equals
(
vo
.
getFileSuffix
())
||
".avi"
.
equals
(
vo
.
getFileSuffix
())
||
".mov"
.
equals
(
vo
.
getFileSuffix
())
||
".flv"
.
equals
(
vo
.
getFileSuffix
()))
{
try
{
InputStream
inputStream
=
new
URL
(
vo
.
getUrl
()).
openStream
();
ByteArrayOutputStream
buffer
=
new
ByteArrayOutputStream
();
byte
[]
data
=
new
byte
[
1024
];
int
nRead
;
while
((
nRead
=
inputStream
.
read
(
data
,
0
,
data
.
length
))
!=
-
1
)
{
buffer
.
write
(
data
,
0
,
nRead
);
}
buffer
.
flush
();
byte
[]
byteArray
=
EncryptUtils
.
decryptByAes
(
buffer
.
toByteArray
());
UploadStreamRequest
request
=
new
UploadStreamRequest
(
accessKeyId
,
accessKeySecret
,
vo
.
getOriginalName
(),
vo
.
getFileName
(),
new
ByteArrayInputStream
(
byteArray
));
/* 是否使用默认水印(可选),指定模板组ID时,根据模板组配置确定是否使用默认水印*/
//request.setShowWaterMark(true);
/* 自定义消息回调设置,参数说明参考文档 https://help.aliyun.com/document_detail/86952.html#UserData */
//request.setUserData(""{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackURL\":\"http://test.test.com\"}}"");
/* 视频分类ID(可选) */
//request.setCateId(0);
/* 视频标签,多个用逗号分隔(可选) */
//request.setTags("标签1,标签2");
/* 视频描述(可选) */
//request.setDescription("视频描述");
/* 封面图片(可选) */
//request.setCoverURL("http://cover.sample.com/sample.jpg");
/* 模板组ID(可选) */
//request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56a33d");
/* 工作流ID(可选) */
//request.setWorkflowId("d4430d07361f0*be1339577859b0177b");
/* 存储区域(可选) */
//request.setStorageLocation("in-201703232118266-5sejdln9o.oss-cn-shanghai.aliyuncs.com");
/* 开启默认上传进度回调 */
// request.setPrintProgress(true);
/* 设置自定义上传进度回调 (必须继承 VoDProgressListener) */
// request.setProgressListener(new PutObjectProgressListener());
/* 设置应用ID*/
//request.setAppId("app-1000000");
/* 点播服务接入点 */
//request.setApiRegionId("cn-shanghai");
/* ECS部署区域*/
// request.setEcsRegionId("cn-shanghai");
UploadVideoImpl
uploader
=
new
UploadVideoImpl
();
UploadStreamResponse
response
=
uploader
.
uploadStream
(
request
);
System
.
out
.
print
(
"RequestId="
+
response
.
getRequestId
()
+
"\n"
);
//请求视频点播服务的请求ID
if
(
response
.
isSuccess
())
{
System
.
out
.
print
(
"VideoId="
+
response
.
getVideoId
()
+
"\n"
);
vo
.
setVideoId
(
response
.
getVideoId
());
SysOss
sysOss
=
BeanUtil
.
toBean
(
vo
,
SysOss
.
class
);
baseMapper
.
updateById
(
sysOss
);
}
else
{
//如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因
System
.
out
.
print
(
"VideoId="
+
response
.
getVideoId
()
+
"\n"
);
System
.
out
.
print
(
"ErrorCode="
+
response
.
getCode
()
+
"\n"
);
System
.
out
.
print
(
"ErrorMessage="
+
response
.
getMessage
()
+
"\n"
);
}
}
catch
(
Exception
e
)
{
}
}
}
}
return
R
.
ok
(
"同步媒体问题至阿里云成功"
);
}
/**
* 下载OSS对象
*
* @param ossId OSS对象ID
...
...
lego-admin/src/main/resources/application.properties
0 → 100644
View file @
bac2858
#阿里云视频点播
#账号AK信息请填写(必选)
aliyun.accessKeyId
=
LTAI5tSKG2FKxnev2SKDt47a
#账号AK信息请填写(必选)
aliyun.accessKeySecret
=
XR5umvk9RKyW1HB1nAiJEaiXfskgiU
#点播服务接入区域
aliyun.regionId
=
cn-shanghai
lego-oss/pom.xml
View file @
bac2858
...
...
@@ -11,6 +11,10 @@
<artifactId>
lego-oss
</artifactId>
<properties>
<!-- fastjson -->
<fastjson.version>
1.2.70
</fastjson.version>
</properties>
<description>
OSS对象存储模块
</description>
...
...
@@ -28,6 +32,38 @@
<artifactId>
aws-java-sdk-s3
</artifactId>
</dependency>
<dependency>
<groupId>
com.aliyun
</groupId>
<artifactId>
aliyun-java-sdk-core
</artifactId>
<version>
4.5.1
</version>
</dependency>
<dependency>
<groupId>
com.aliyun
</groupId>
<artifactId>
aliyun-java-sdk-vod
</artifactId>
<version>
2.15.11
</version>
</dependency>
<dependency>
<groupId>
com.aliyun.oss
</groupId>
<artifactId>
aliyun-sdk-oss
</artifactId>
<version>
3.10.2
</version>
</dependency>
<dependency>
<groupId>
com.aliyun
</groupId>
<artifactId>
aliyun-java-vod-upload
</artifactId>
<version>
1.4.14
</version>
</dependency>
<!-- fastjson -->
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
fastjson
</artifactId>
<version>
${fastjson.version}
</version>
</dependency>
<dependency>
<groupId>
cn.hutool
</groupId>
<artifactId>
hutool-all
</artifactId>
<version>
5.3.4
</version>
<scope>
compile
</scope>
</dependency>
</dependencies>
</project>
...
...
lego-oss/src/main/java/com/lego/oss/config/AppConfig.java
0 → 100644
View file @
bac2858
package
com
.
lego
.
oss
.
config
;
import
lombok.Data
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.PropertySource
;
/**
* @author chentao
* @date 2026-04-16
*/
@Data
@Configuration
@PropertySource
(
value
=
"classpath:application.properties"
,
encoding
=
"UTF-8"
)
public
class
AppConfig
{
@Value
(
"${aliyun.accessKeyId}"
)
private
String
aliyunAccessKeyId
;
@Value
(
"${aliyun.accessKeySecret}"
)
private
String
aliyunAccessKeySecret
;
@Value
(
"${aliyun.regionId}"
)
private
String
aliyunRegionId
;
}
lego-system/src/main/java/com/lego/system/domain/SysOss.java
View file @
bac2858
...
...
@@ -47,4 +47,9 @@ public class SysOss extends BaseEntity {
*/
private
String
service
;
/**
* 阿里云videoId
*/
private
String
videoId
;
}
...
...
lego-system/src/main/java/com/lego/system/domain/vo/SysOssVo.java
View file @
bac2858
...
...
@@ -54,5 +54,9 @@ public class SysOssVo {
*/
private
String
service
;
/**
* 阿里云videoId
*/
private
String
videoId
;
}
...
...
lego-system/src/main/java/com/lego/system/service/ISysOssService.java
View file @
bac2858
...
...
@@ -37,4 +37,6 @@ public interface ISysOssService {
void
delete
(
Long
ossId
);
List
<
SysOssVo
>
list
();
}
...
...
lego-system/src/main/java/com/lego/system/service/impl/SysOssServiceImpl.java
View file @
bac2858
...
...
@@ -3,7 +3,6 @@ package com.lego.system.service.impl;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.convert.Convert
;
import
cn.hutool.core.io.IoUtil
;
import
cn.hutool.core.util.CharsetUtil
;
import
cn.hutool.core.util.ObjectUtil
;
import
cn.hutool.core.util.StrUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
...
...
@@ -42,7 +41,6 @@ import javax.servlet.http.HttpServletResponse;
import
java.io.File
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.nio.charset.StandardCharsets
;
import
java.util.*
;
import
java.util.stream.Collectors
;
...
...
@@ -68,6 +66,12 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
return
TableDataInfo
.
build
(
result
);
}
@Override
public
List
<
SysOssVo
>
list
()
{
List
<
SysOssVo
>
list
=
baseMapper
.
selectVoList
(
Wrappers
.<
SysOss
>
lambdaQuery
());
return
list
;
}
private
void
repUrl
(
List
<
SysOssVo
>
list
)
{
String
baseUrl
=
configService
.
getConfigValue
(
"sys.oss.baseUrl"
);
for
(
SysOssVo
vo
:
list
)
{
...
...
@@ -113,7 +117,12 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
SysOssVo
vo
=
SpringUtils
.
getAopProxy
(
this
).
getById
(
id
);
if
(
ObjectUtil
.
isNotNull
(
vo
))
{
try
{
if
(
StringUtils
.
isBlank
(
vo
.
getVideoId
())){
list
.
add
(
this
.
matchingUrl
(
vo
).
getUrl
());
}
else
{
list
.
add
(
vo
.
getVideoId
());
}
}
catch
(
Exception
ignored
)
{
// 如果oss异常无法连接则将数据直接返回
list
.
add
(
vo
.
getUrl
());
...
...
@@ -124,9 +133,11 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
List
<
String
>
repList
=
new
ArrayList
<>();
for
(
String
url
:
list
)
{
if
(
StrUtil
.
isNotBlank
(
url
)
&&
StrUtil
.
isNotBlank
(
baseUrl
))
{
if
(
url
.
contains
(
"http"
))
{
repList
.
add
(
url
.
replace
(
"127.0.0.1:9000"
,
baseUrl
));
}
}
}
return
String
.
join
(
StringUtils
.
SEPARATOR
,
repList
);
}
...
...
@@ -210,7 +221,11 @@ public class SysOssServiceImpl implements ISysOssService, OssService {
OssClient
storage
=
OssFactory
.
instance
();
UploadResult
uploadResult
;
try
{
if
(
".pdf"
.
equals
(
suffix
)
||
".mp4"
.
equals
(
suffix
)
||
".json"
.
equals
(
suffix
)
||
".ldr"
.
equals
(
suffix
))
{
if
(
".mov"
.
equals
(
suffix
)
||
".mp4"
.
equals
(
suffix
)
||
".flv"
.
equals
(
suffix
)
||
".avi"
.
equals
(
suffix
))
{
byte
[]
encryptBytes
=
EncryptUtils
.
encryptByAes
(
file
.
getBytes
());
uploadResult
=
storage
.
uploadSuffix
(
encryptBytes
,
suffix
,
file
.
getContentType
());
}
else
if
(
".pdf"
.
equals
(
suffix
)
||
".json"
.
equals
(
suffix
)
||
".ldr"
.
equals
(
suffix
))
{
byte
[]
encryptBytes
=
EncryptUtils
.
encryptByAes
(
file
.
getBytes
());
uploadResult
=
storage
.
uploadSuffix
(
encryptBytes
,
suffix
,
file
.
getContentType
());
}
...
...
Write
Preview
Styling with
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