Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
midjourney-proxy
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
徐少华
midjourney-proxy
Commits
0e78c657
Commit
0e78c657
authored
Jun 15, 2020
by
朱亚洁
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
'feat:[1003010]华为云迁移OBS/MPC'
parent
c9b7cb66
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
1244 additions
and
271 deletions
+1244
-271
aliyun.properties
...d-common-config/src/main/resources.prod/aliyun.properties
+23
-16
aliyun.properties
...d-common-config/src/main/resources.test/aliyun.properties
+22
-14
aliyun.properties
...ud-common-config/src/main/resources.uat/aliyun.properties
+23
-16
pom.xml
pcloud-common/pom.xml
+17
-2
AliyunConstant.java
.../main/java/com/pcloud/common/constant/AliyunConstant.java
+130
-50
OssUtils.java
...rc/main/java/com/pcloud/common/utils/aliyun/OssUtils.java
+510
-173
MPCTest.java
...ain/java/com/pcloud/common/utils/aliyun/test/MPCTest.java
+297
-0
ObsTest.java
...ain/java/com/pcloud/common/utils/aliyun/test/ObsTest.java
+193
-0
pom.xml
pom.xml
+29
-0
No files found.
pcloud-common-config/src/main/resources.prod/aliyun.properties
View file @
0e78c657
## main
## main
Ϊak sk
main.access.key.id
=
LTAIx8FODeVLN3bD
main.access.key.id
=
CROQ0IJRW2FW5NSERZBR
main.access.key.secret
=
eJbZwTzatZq4SMyDiQeh7NzIHkdAaO
main.access.key.secret
=
rAbki4thgWx9iKXendlIH3gvKi8JFHUcVOWwObyS
## OSS
## OSS
oss.region
=
oss-cn-hangzhou
oss.region
=
cn-east-2
oss.endpoint
=
http://oss-cn-hangzhou.aliyuncs.com
oss.endpoint
=
obs.cn-east-2.myhuaweicloud.com
file.bucket
=
whlg-oss-002
file.bucket
=
whlg-oss-prod-002
file.original.url
=
http://whlg-oss-002.oss-cn-hangzhou.aliyuncs.com/
file.original.url
=
http://whlg-oss-001.obs.cn-east-2.myhuaweicloud.com/
input.bucket
=
whlg-oss-prod-001
oss.region.bj
=
oss-cn-beijing
oss.region.bj
=
oss-cn-beijing
oss.endpoint.bj
=
http://oss-cn-beijing
-internal
.aliyuncs.com
oss.endpoint.bj
=
http://oss-cn-beijing.aliyuncs.com
live.bucket
=
whlg-oss-live
dev
live.bucket
=
whlg-oss-live
live.original.url
=
http://whlg-oss-livedev.oss-cn-beijing.aliyuncs.com/
live.original.url
=
http://whlg-oss-livedev.oss-cn-beijing.aliyuncs.com/
by.bucket
=
byfile-oss-01
by.bucket
=
byfile-oss-01
by.original.url
=
http://byfile-oss-01.oss-cn-hangzhou.aliyuncs.com/
by.original.url
=
http://byfile-oss-01.oss-cn-hangzhou.aliyuncs.com/
## mts
## mts
mts.region
=
cn-
hangzhou
mts.region
=
cn-
east-2
mts.endpoint
=
m
ts.cn-hangzhou.aliyuncs
.com
mts.endpoint
=
m
pc.cn-east-2.myhuaweicloud
.com
pipelineid
=
a63c988125054b07b1d3bd6e10c327de
pipelineid
=
a63c988125054b07b1d3bd6e10c327de
mp3TemplateId
=
d60210d2fd5bfcacce66238142437965
mts.projectId
=
07455135488025b22fe7c01fdb631c14
mp4TemplateId
=
67745f7eb8b7ca9bcf74d96c2364e6c1
mts.ak
=
8J56JHJN5P8OLR5ERKFU
mts.sk
=
xAlBYlowAhwa9c1Wi4JsX7XkZGFlzlWW3CBHdZWJ
mp3TemplateId
=
104257
mp4TemplateId
=
104256
m3u8TemplateId
=
283cd916aa504502b3704f3f5a45addc
m3u8TemplateId
=
283cd916aa504502b3704f3f5a45addc
mts.region.bj
=
cn-beijing
mts.region.bj
=
cn-beijing
...
@@ -33,9 +37,13 @@ mp4TemplateId.bj = f4165d42e5eb680c8f919f960f35059c
...
@@ -33,9 +37,13 @@ mp4TemplateId.bj = f4165d42e5eb680c8f919f960f35059c
## cdn
## cdn
file.domain.name
=
oss.5rs.me
file.domain.name
=
oss.5rs.me
file.cdn.url
=
https://oss.5rs.me/
file.cdn.url
=
https://oss.5rs.me/
oss.cdn.urls
=
http://file.chubanyun.me/,http://file.techdc.cn/,https://file.raysyun.com/,http://file.raysgo.com/,http
s://file.5rs.me/,https://oss.5rs.me/,http://live.chubanyun.me/,https://download.5rs.me/,http://rays-adviser.chubanyun.me/,https://byfile.1wlshu
.com/
oss.cdn.urls
=
http://file.chubanyun.me/,http://file.techdc.cn/,https://file.raysyun.com/,http://file.raysgo.com/,http
://oss.raysgo.com/,https://file.5rs.me/,https://oss.5rs.me/,http://live.chubanyun.me/,https://download.5rs.me/,http://rays-adviser.chubanyun.me/,https://byfile.1wlshu.com/,https://byfile.raysgo
.com/
rays.cdn.urls
=
https://file.5rs.me/,https://oss.5rs.me/
rays.cdn.urls
=
https://file.5rs.me/,https://oss.5rs.me/
file.cdn.url.download
=
https://download.5rs.me/
file.cdn.url.download
=
https://download.5rs.me/
file.cdn.url.live
=
http://live.chubanyun.me/
file.cdn.url.live
=
http://live.chubanyun.me/
file.cdn.url.by
=
https://byfile.1wlshu.com/
file.cdn.url.by
=
https://byfile.raysgo.com/
\ No newline at end of file
huawei.access.key
=
CROQ0IJRW2FW5NSERZBR
huawei.secret.key
=
rAbki4thgWx9iKXendlIH3gvKi8JFHUcVOWwObyS
pcloud-common-config/src/main/resources.test/aliyun.properties
View file @
0e78c657
## main
## main
Ϊak sk
main.access.key.id
=
LTAIx8FODeVLN3bD
main.access.key.id
=
CROQ0IJRW2FW5NSERZBR
main.access.key.secret
=
eJbZwTzatZq4SMyDiQeh7NzIHkdAaO
main.access.key.secret
=
rAbki4thgWx9iKXendlIH3gvKi8JFHUcVOWwObyS
## OSS
## OSS
oss.region
=
oss-cn-hangzhou
oss.region
=
cn-east-2
oss.endpoint
=
http://oss-cn-hangzhou.aliyuncs.com
oss.endpoint
=
obs.cn-east-2.myhuaweicloud.com
file.bucket
=
whlg-oss-002
file.bucket
=
whlg-oss-test-002
file.original.url
=
http://whlg-oss-002.oss-cn-hangzhou.aliyuncs.com/
file.original.url
=
http://whlg-oss-001.obs.cn-east-2.myhuaweicloud.com/
input.bucket
=
whlg-oss-test-001
oss.region.bj
=
oss-cn-beijing
oss.region.bj
=
oss-cn-beijing
oss.endpoint.bj
=
http://oss-cn-beijing.aliyuncs.com
oss.endpoint.bj
=
http://oss-cn-beijing.aliyuncs.com
live.bucket
=
whlg-oss-live
dev
live.bucket
=
whlg-oss-live
live.original.url
=
http://whlg-oss-livedev.oss-cn-beijing.aliyuncs.com/
live.original.url
=
http://whlg-oss-livedev.oss-cn-beijing.aliyuncs.com/
by.bucket
=
byfile-oss-01
by.bucket
=
byfile-oss-01
by.original.url
=
http://byfile-oss-01.oss-cn-hangzhou.aliyuncs.com/
by.original.url
=
http://byfile-oss-01.oss-cn-hangzhou.aliyuncs.com/
## mts
## mts
mts.region
=
cn-
hangzhou
mts.region
=
cn-
east-2
mts.endpoint
=
m
ts.cn-hangzhou.aliyuncs
.com
mts.endpoint
=
m
pc.cn-east-2.myhuaweicloud
.com
pipelineid
=
a63c988125054b07b1d3bd6e10c327de
pipelineid
=
a63c988125054b07b1d3bd6e10c327de
mp3TemplateId
=
d60210d2fd5bfcacce66238142437965
mts.projectId
=
07455135488025b22fe7c01fdb631c14
mp4TemplateId
=
67745f7eb8b7ca9bcf74d96c2364e6c1
mts.ak
=
8J56JHJN5P8OLR5ERKFU
mts.sk
=
xAlBYlowAhwa9c1Wi4JsX7XkZGFlzlWW3CBHdZWJ
mp3TemplateId
=
104257
mp4TemplateId
=
104256
m3u8TemplateId
=
283cd916aa504502b3704f3f5a45addc
m3u8TemplateId
=
283cd916aa504502b3704f3f5a45addc
mts.region.bj
=
cn-beijing
mts.region.bj
=
cn-beijing
...
@@ -32,10 +36,14 @@ mp4TemplateId.bj = f4165d42e5eb680c8f919f960f35059c
...
@@ -32,10 +36,14 @@ mp4TemplateId.bj = f4165d42e5eb680c8f919f960f35059c
## cdn
## cdn
file.domain.name
=
oss.5rs.me
file.domain.name
=
oss.5rs.me
file.cdn.url
=
https://oss.
5rs.me
/
file.cdn.url
=
https://oss.
raysgo.com
/
oss.cdn.urls
=
http://file.chubanyun.me/,http://file.techdc.cn/,https://file.raysyun.com/,http://file.raysgo.com/,http://oss.raysgo.com/,https://file.5rs.me/,https://oss.5rs.me/,http://live.chubanyun.me/,https://download.5rs.me/,http://rays-adviser.chubanyun.me/,https://byfile.1wlshu.com/,https://byfile.raysgo.com/
oss.cdn.urls
=
http://file.chubanyun.me/,http://file.techdc.cn/,https://file.raysyun.com/,http://file.raysgo.com/,http://oss.raysgo.com/,https://file.5rs.me/,https://oss.5rs.me/,http://live.chubanyun.me/,https://download.5rs.me/,http://rays-adviser.chubanyun.me/,https://byfile.1wlshu.com/,https://byfile.raysgo.com/
,https://oss.raysyun.com/
rays.cdn.urls
=
https://file.5rs.me/,https://oss.5rs.me/
rays.cdn.urls
=
https://file.5rs.me/,https://oss.5rs.me/
file.cdn.url.download
=
https://download.5rs.me/
file.cdn.url.download
=
https://download.5rs.me/
file.cdn.url.live
=
http://live.chubanyun.me/
file.cdn.url.live
=
http://live.chubanyun.me/
file.cdn.url.by
=
https://byfile.raysgo.com/
file.cdn.url.by
=
https://byfile.raysgo.com/
huawei.access.key
=
CROQ0IJRW2FW5NSERZBR
huawei.secret.key
=
rAbki4thgWx9iKXendlIH3gvKi8JFHUcVOWwObyS
pcloud-common-config/src/main/resources.uat/aliyun.properties
View file @
0e78c657
## main
## main
Ϊak sk
main.access.key.id
=
LTAIx8FODeVLN3bD
main.access.key.id
=
CROQ0IJRW2FW5NSERZBR
main.access.key.secret
=
eJbZwTzatZq4SMyDiQeh7NzIHkdAaO
main.access.key.secret
=
rAbki4thgWx9iKXendlIH3gvKi8JFHUcVOWwObyS
## OSS
## OSS
oss.region
=
oss-cn-hangzhou
oss.region
=
cn-east-2
oss.endpoint
=
http://oss-cn-hangzhou.aliyuncs.com
oss.endpoint
=
obs.cn-east-2.myhuaweicloud.com
file.bucket
=
whlg-oss-002
file.bucket
=
whlg-oss-uat-002
file.original.url
=
http://whlg-oss-002.oss-cn-hangzhou.aliyuncs.com/
file.original.url
=
http://whlg-oss-001.obs.cn-east-2.myhuaweicloud.com/
input.bucket
=
whlg-oss-uat-001
oss.region.bj
=
oss-cn-beijing
oss.region.bj
=
oss-cn-beijing
oss.endpoint.bj
=
http://oss-cn-beijing.aliyuncs.com
oss.endpoint.bj
=
http://oss-cn-beijing.aliyuncs.com
live.bucket
=
whlg-oss-live
dev
live.bucket
=
whlg-oss-live
live.original.url
=
http://whlg-oss-livedev.oss-cn-beijing.aliyuncs.com/
live.original.url
=
http://whlg-oss-livedev.oss-cn-beijing.aliyuncs.com/
by.bucket
=
byfile-oss-01
by.bucket
=
byfile-oss-01
by.original.url
=
http://byfile-oss-01.oss-cn-hangzhou.aliyuncs.com/
by.original.url
=
http://byfile-oss-01.oss-cn-hangzhou.aliyuncs.com/
## mts
## mts
mts.region
=
cn-
hangzhou
mts.region
=
cn-
east-2
mts.endpoint
=
m
ts.cn-hangzhou.aliyuncs
.com
mts.endpoint
=
m
pc.cn-east-2.myhuaweicloud
.com
pipelineid
=
a63c988125054b07b1d3bd6e10c327de
pipelineid
=
a63c988125054b07b1d3bd6e10c327de
mp3TemplateId
=
d60210d2fd5bfcacce66238142437965
mts.projectId
=
07455135488025b22fe7c01fdb631c14
mp4TemplateId
=
67745f7eb8b7ca9bcf74d96c2364e6c1
mts.ak
=
8J56JHJN5P8OLR5ERKFU
mts.sk
=
xAlBYlowAhwa9c1Wi4JsX7XkZGFlzlWW3CBHdZWJ
mp3TemplateId
=
104257
mp4TemplateId
=
104256
m3u8TemplateId
=
283cd916aa504502b3704f3f5a45addc
m3u8TemplateId
=
283cd916aa504502b3704f3f5a45addc
mts.region.bj
=
cn-beijing
mts.region.bj
=
cn-beijing
...
@@ -32,10 +36,14 @@ mp4TemplateId.bj = f4165d42e5eb680c8f919f960f35059c
...
@@ -32,10 +36,14 @@ mp4TemplateId.bj = f4165d42e5eb680c8f919f960f35059c
## cdn
## cdn
file.domain.name
=
oss.5rs.me
file.domain.name
=
oss.5rs.me
file.cdn.url
=
https://oss.
5rs.me
/
file.cdn.url
=
https://oss.
raysyun.com
/
oss.cdn.urls
=
http://file.chubanyun.me/,http://file.techdc.cn/,https://file.raysyun.com/,http://file.raysgo.com/,http
s://file.5rs.me/,https://oss.5rs.me/,http://live.chubanyun.me/,https://download.5rs.me/,http://rays-adviser.chubanyun.me/,https://byfile.1wlshu.com
oss.cdn.urls
=
http://file.chubanyun.me/,http://file.techdc.cn/,https://file.raysyun.com/,http://file.raysgo.com/,http
://oss.raysgo.com/,https://file.5rs.me/,https://oss.5rs.me/,http://live.chubanyun.me/,https://download.5rs.me/,http://rays-adviser.chubanyun.me/,https://byfile.1wlshu.com/,https://byfile.raysgo.com/,https://oss.raysyun.com/
rays.cdn.urls
=
https://file.5rs.me/,https://oss.5rs.me/
rays.cdn.urls
=
https://file.5rs.me/,https://oss.5rs.me/
file.cdn.url.download
=
https://download.5rs.me/
file.cdn.url.download
=
https://download.5rs.me/
file.cdn.url.live
=
http://live.chubanyun.me/
file.cdn.url.live
=
http://live.chubanyun.me/
file.cdn.url.by
=
https://byfile.1wlshu.com
file.cdn.url.by
=
https://byfile.raysgo.com/
\ No newline at end of file
huawei.access.key
=
CROQ0IJRW2FW5NSERZBR
huawei.secret.key
=
rAbki4thgWx9iKXendlIH3gvKi8JFHUcVOWwObyS
pcloud-common/pom.xml
View file @
0e78c657
...
@@ -155,10 +155,11 @@
...
@@ -155,10 +155,11 @@
<artifactId>
commons-io
</artifactId>
<artifactId>
commons-io
</artifactId>
</dependency>
</dependency>
<dependency>
<!-- <dependency>
<groupId>com.squareup.okhttp3</groupId>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<artifactId>okhttp</artifactId>
</dependency>
<version>3.6.0</version>
</dependency>-->
<dependency>
<dependency>
<groupId>
commons-codec
</groupId>
<groupId>
commons-codec
</groupId>
...
@@ -292,6 +293,20 @@
...
@@ -292,6 +293,20 @@
<groupId>
com.aliyun
</groupId>
<groupId>
com.aliyun
</groupId>
<artifactId>
aliyun-java-sdk-mts
</artifactId>
<artifactId>
aliyun-java-sdk-mts
</artifactId>
</dependency>
</dependency>
<!--华为云媒体转码SDK包 -->
<dependency>
<groupId>
com.huawei.mpc
</groupId>
<artifactId>
cloud-java-sdk-mpc
</artifactId>
</dependency>
<dependency>
<groupId>
com.squareup.retrofit2
</groupId>
<artifactId>
retrofit
</artifactId>
</dependency>
<dependency>
<groupId>
com.huaweicloud
</groupId>
<artifactId>
esdk-obs-java
</artifactId>
<version>
3.19.7
</version>
</dependency>
<!-- Jackson Begin -->
<!-- Jackson Begin -->
<dependency>
<dependency>
...
...
pcloud-common/src/main/java/com/pcloud/common/constant/AliyunConstant.java
View file @
0e78c657
...
@@ -18,7 +18,7 @@ import com.pcloud.common.utils.string.StringUtil;
...
@@ -18,7 +18,7 @@ import com.pcloud.common.utils.string.StringUtil;
public
class
AliyunConstant
{
public
class
AliyunConstant
{
/**
/**
* 主账号keyId
* 主账号keyId
,华为云ak
*/
*/
public
static
String
MAIN_ACCESS_KEY_ID
;
public
static
String
MAIN_ACCESS_KEY_ID
;
...
@@ -28,7 +28,7 @@ public class AliyunConstant {
...
@@ -28,7 +28,7 @@ public class AliyunConstant {
}
}
/**
/**
* 主账号keySecret
* 主账号keySecret
华为云sk
*/
*/
public
static
String
MAIN_ACCESS_KEY_SECRET
;
public
static
String
MAIN_ACCESS_KEY_SECRET
;
...
@@ -52,7 +52,7 @@ public class AliyunConstant {
...
@@ -52,7 +52,7 @@ public class AliyunConstant {
*/
*/
public
static
String
MTS_REGION_BJ
;
public
static
String
MTS_REGION_BJ
;
@Value
(
"
${mts.region.bj}"
)
@Value
(
"
cn-north-4"
)
public
void
setMtsRegionBj
(
String
mtsRegionBj
)
{
public
void
setMtsRegionBj
(
String
mtsRegionBj
)
{
MTS_REGION_BJ
=
mtsRegionBj
;
MTS_REGION_BJ
=
mtsRegionBj
;
}
}
...
@@ -72,7 +72,7 @@ public class AliyunConstant {
...
@@ -72,7 +72,7 @@ public class AliyunConstant {
*/
*/
public
static
String
OSS_REGION_BJ
;
public
static
String
OSS_REGION_BJ
;
@Value
(
"
${oss.region.bj}"
)
@Value
(
"
cn-north-4"
)
public
void
setOssRegionBj
(
String
ossRegionBj
)
{
public
void
setOssRegionBj
(
String
ossRegionBj
)
{
OSS_REGION_BJ
=
ossRegionBj
;
OSS_REGION_BJ
=
ossRegionBj
;
}
}
...
@@ -112,7 +112,7 @@ public class AliyunConstant {
...
@@ -112,7 +112,7 @@ public class AliyunConstant {
*/
*/
public
static
String
MTS_ENDPOINT_BJ
;
public
static
String
MTS_ENDPOINT_BJ
;
@Value
(
"
${mts.endpoint.bj}"
)
@Value
(
"
live.cn-north-4.myhuaweicloud.com"
)
public
void
setMtsEndpointBj
(
String
mtsEndpointBj
)
{
public
void
setMtsEndpointBj
(
String
mtsEndpointBj
)
{
MTS_ENDPOINT_BJ
=
mtsEndpointBj
;
MTS_ENDPOINT_BJ
=
mtsEndpointBj
;
}
}
...
@@ -138,6 +138,16 @@ public class AliyunConstant {
...
@@ -138,6 +138,16 @@ public class AliyunConstant {
}
}
/**
/**
* 设置用户项目编号ProjectId
*/
public
static
String
PROJECT_ID
;
@Value
(
"${mts.projectId}"
)
public
void
setProjectId
(
String
projectId
)
{
PROJECT_ID
=
projectId
;
}
/**
* 转MP3模板ID
* 转MP3模板ID
*/
*/
public
static
String
MP3_TEMPLATE_ID
;
public
static
String
MP3_TEMPLATE_ID
;
...
@@ -182,7 +192,7 @@ public class AliyunConstant {
...
@@ -182,7 +192,7 @@ public class AliyunConstant {
*/
*/
public
static
String
MP4_TEMPLATE_ID_BJ
;
public
static
String
MP4_TEMPLATE_ID_BJ
;
@Value
(
"
${mp4TemplateId}"
)
@Value
(
"
125799"
)
public
void
setMp4TemplateIdBj
(
String
mp4TemplateIdBj
)
{
public
void
setMp4TemplateIdBj
(
String
mp4TemplateIdBj
)
{
MP4_TEMPLATE_ID_BJ
=
mp4TemplateIdBj
;
MP4_TEMPLATE_ID_BJ
=
mp4TemplateIdBj
;
}
}
...
@@ -190,7 +200,12 @@ public class AliyunConstant {
...
@@ -190,7 +200,12 @@ public class AliyunConstant {
/**
/**
* OSS存储输入地址
* OSS存储输入地址
*/
*/
public
static
final
String
INPUT_BUCKET
=
"whlg-oss-001"
;
public
static
String
INPUT_BUCKET
;
@Value
(
"${input.bucket}"
)
public
void
setInputBucket
(
String
imputBucket
)
{
INPUT_BUCKET
=
imputBucket
;
}
/**
/**
* OSS存储输出地址
* OSS存储输出地址
...
@@ -220,22 +235,27 @@ public class AliyunConstant {
...
@@ -220,22 +235,27 @@ public class AliyunConstant {
/**
/**
* 版元存储输出地址
* 版元存储输出地址
*/
*/
public
static
final
String
BY_BUCKET
=
"byfile-oss-01"
;
public
static
String
BY_BUCKET
;
@Value
(
"${by.bucket}"
)
public
void
setByBucket
(
String
byBucket
){
BY_BUCKET
=
byBucket
;
}
/**
/**
* 开发存储输出地址
* 开发存储输出地址
*/
*/
public
static
final
String
DEV_BUCKET
=
"whlg-oss-dev
"
;
public
static
final
String
DEV_BUCKET
=
"whlg-oss-dev
-002"
;
/**
/**
* 测试存储输出地址
* 测试存储输出地址
*/
*/
public
static
final
String
TEST_BUCKET
=
"whlg-oss-test
"
;
public
static
final
String
TEST_BUCKET
=
"whlg-oss-test
-002"
;
/**
/**
* UAT存储输出地址
* UAT存储输出地址
*/
*/
public
static
final
String
UAT_BUCKET
=
"whlg-oss-uat
"
;
public
static
final
String
UAT_BUCKET
=
"whlg-oss-uat
-002"
;
/**
/**
* OSS 鉴权KEY(仅限下载用)
* OSS 鉴权KEY(仅限下载用)
...
@@ -342,11 +362,55 @@ public class AliyunConstant {
...
@@ -342,11 +362,55 @@ public class AliyunConstant {
BY_ORIGINAL_URL
=
byOriginalUrl
;
BY_ORIGINAL_URL
=
byOriginalUrl
;
}
}
/**
* 华为云转码ak
*/
public
static
String
MtsAK
;
@Value
(
"${mts.ak}"
)
public
void
setMtsAK
(
String
mtsAK
)
{
MtsAK
=
mtsAK
;
}
/**
* 华为云转码sk
*/
public
static
String
MtsSK
;
@Value
(
"${mts.sk}"
)
public
void
setMtsSK
(
String
mtsSK
)
{
MtsSK
=
mtsSK
;
}
/**
/**
* 视频水印模板ID-左下角
* 视频水印模板ID-左下角
*/
*/
public
static
final
String
WATERMARK_BOTTOM_LEFT
=
"cb8fe5517c5a44c19284cdf130dd223d"
;
public
static
final
String
WATERMARK_BOTTOM_LEFT
=
"cb8fe5517c5a44c19284cdf130dd223d"
;
/**
* 华为云Access Key
*/
public
static
String
ACCESS_KEY
;
@Value
(
"${huawei.access.key}"
)
public
void
setAccessKey
(
String
accessKey
)
{
ACCESS_KEY
=
accessKey
;
}
/**
* 华为云 Secret Key
*/
public
static
String
SECRET_KEY
;
@Value
(
"${huawei.secret.key}"
)
public
static
void
setSecretKey
(
String
secretKey
)
{
SECRET_KEY
=
secretKey
;
}
/**
/**
* 根据域名获取bucket名称
* 根据域名获取bucket名称
*
*
...
@@ -357,18 +421,23 @@ public class AliyunConstant {
...
@@ -357,18 +421,23 @@ public class AliyunConstant {
if
(
StringUtil
.
isEmpty
(
fileUrl
))
{
if
(
StringUtil
.
isEmpty
(
fileUrl
))
{
return
null
;
return
null
;
}
}
if
(
fileUrl
.
contains
(
"transcode"
)){
return
FILE_BUCKET
;
}
String
domainName
=
FileUtils
.
getDomainName
(
fileUrl
);
String
domainName
=
FileUtils
.
getDomainName
(
fileUrl
);
if
(
domainName
==
null
)
{
if
(
StringUtil
.
isEmpty
(
domainName
))
{
return
INPUT_BUCKET
;
return
INPUT_BUCKET
;
}
}
//不根据域名判断
switch
(
domainName
)
{
switch
(
domainName
)
{
case
"file.chubanyun.me"
:
// case "file.chubanyun.me":
return
DEV_BUCKET
;
// return DEV_BUCKET;
case
"file.techdc.cn"
:
// case "file.techdc.cn":
case
"file.raysgo.com"
:
// case "file.raysgo.com":
return
TEST_BUCKET
;
// case "oss.raysgo.com":
case
"file.raysyun.com"
:
// return TEST_BUCKET;
return
UAT_BUCKET
;
// case "file.raysyun.com":
// return UAT_BUCKET;
case
"live.chubanyun.me"
:
case
"live.chubanyun.me"
:
return
LIVE_BUCKET
;
return
LIVE_BUCKET
;
case
"rays-adviser.chubanyun.me"
:
case
"rays-adviser.chubanyun.me"
:
...
@@ -376,12 +445,12 @@ public class AliyunConstant {
...
@@ -376,12 +445,12 @@ public class AliyunConstant {
case
"byfile.1wlshu.com"
:
case
"byfile.1wlshu.com"
:
case
"byfile.raysgo.com"
:
case
"byfile.raysgo.com"
:
return
BY_BUCKET
;
return
BY_BUCKET
;
case
"file.5rs.me"
:
// case "file.5rs.me":
case
"oss.5rs.me"
:
// case "oss.5rs.me":
case
"download.5rs.me"
:
// case "download.5rs.me":
return
FILE_BUCKET
;
// return FILE_BUCKET;
default
:
default
:
return
INPUT_BUCKET
;
return
FILE_BUCKET
;
}
}
}
}
...
@@ -395,11 +464,12 @@ public class AliyunConstant {
...
@@ -395,11 +464,12 @@ public class AliyunConstant {
if
(
StringUtil
.
isEmpty
(
bucketName
))
{
if
(
StringUtil
.
isEmpty
(
bucketName
))
{
return
null
;
return
null
;
}
}
if
(
LIVE_BUCKET
.
equals
(
bucketName
))
if
(
LIVE_BUCKET
.
equals
(
bucketName
))
{
return
OSS_REGION_BJ
;
return
OSS_REGION_BJ
;
else
}
else
{
return
OSS_REGION
;
return
OSS_REGION
;
}
}
}
/**
/**
* 获取媒体转码地域名称
* 获取媒体转码地域名称
...
@@ -411,11 +481,12 @@ public class AliyunConstant {
...
@@ -411,11 +481,12 @@ public class AliyunConstant {
if
(
StringUtil
.
isEmpty
(
bucketName
))
{
if
(
StringUtil
.
isEmpty
(
bucketName
))
{
return
null
;
return
null
;
}
}
if
(
LIVE_BUCKET
.
equals
(
bucketName
))
if
(
LIVE_BUCKET
.
equals
(
bucketName
))
{
return
MTS_REGION_BJ
;
return
MTS_REGION_BJ
;
else
}
else
{
return
MTS_REGION
;
return
MTS_REGION
;
}
}
}
/**
/**
* 获取媒体转码EndPoint
* 获取媒体转码EndPoint
...
@@ -427,11 +498,12 @@ public class AliyunConstant {
...
@@ -427,11 +498,12 @@ public class AliyunConstant {
if
(
StringUtil
.
isEmpty
(
bucketName
))
{
if
(
StringUtil
.
isEmpty
(
bucketName
))
{
return
null
;
return
null
;
}
}
if
(
LIVE_BUCKET
.
equals
(
bucketName
))
if
(
LIVE_BUCKET
.
equals
(
bucketName
))
{
return
MTS_ENDPOINT_BJ
;
return
MTS_ENDPOINT_BJ
;
else
}
else
{
return
MTS_ENDPOINT
;
return
MTS_ENDPOINT
;
}
}
}
/**
/**
* 获取OSS输出bucket
* 获取OSS输出bucket
...
@@ -443,13 +515,14 @@ public class AliyunConstant {
...
@@ -443,13 +515,14 @@ public class AliyunConstant {
if
(
StringUtil
.
isEmpty
(
bucketName
))
{
if
(
StringUtil
.
isEmpty
(
bucketName
))
{
return
null
;
return
null
;
}
}
if
(
LIVE_BUCKET
.
equals
(
bucketName
))
if
(
LIVE_BUCKET
.
equals
(
bucketName
))
{
return
LIVE_BUCKET
;
return
LIVE_BUCKET
;
else
if
(
BY_BUCKET
.
equals
(
bucketName
))
}
else
if
(
BY_BUCKET
.
equals
(
bucketName
))
{
return
BY_BUCKET
;
return
BY_BUCKET
;
else
}
else
{
return
FILE_BUCKET
;
return
FILE_BUCKET
;
}
}
}
/**
/**
* 获取转码管道ID
* 获取转码管道ID
...
@@ -461,11 +534,12 @@ public class AliyunConstant {
...
@@ -461,11 +534,12 @@ public class AliyunConstant {
if
(
StringUtil
.
isEmpty
(
bucketName
))
{
if
(
StringUtil
.
isEmpty
(
bucketName
))
{
return
null
;
return
null
;
}
}
if
(
LIVE_BUCKET
.
equals
(
bucketName
))
if
(
LIVE_BUCKET
.
equals
(
bucketName
))
{
return
PIPELINEID_BJ
;
return
PIPELINEID_BJ
;
else
}
else
{
return
PIPELINEID
;
return
PIPELINEID
;
}
}
}
/**
/**
* 获取MP3转码模板ID
* 获取MP3转码模板ID
...
@@ -477,11 +551,12 @@ public class AliyunConstant {
...
@@ -477,11 +551,12 @@ public class AliyunConstant {
if
(
StringUtil
.
isEmpty
(
bucketName
))
{
if
(
StringUtil
.
isEmpty
(
bucketName
))
{
return
null
;
return
null
;
}
}
if
(
LIVE_BUCKET
.
equals
(
bucketName
))
if
(
LIVE_BUCKET
.
equals
(
bucketName
))
{
return
MP3_TEMPLATE_ID_BJ
;
return
MP3_TEMPLATE_ID_BJ
;
else
}
else
{
return
MP3_TEMPLATE_ID
;
return
MP3_TEMPLATE_ID
;
}
}
}
/**
/**
* 获取MP4转码模板ID
* 获取MP4转码模板ID
...
@@ -493,11 +568,12 @@ public class AliyunConstant {
...
@@ -493,11 +568,12 @@ public class AliyunConstant {
if
(
StringUtil
.
isEmpty
(
bucketName
))
{
if
(
StringUtil
.
isEmpty
(
bucketName
))
{
return
null
;
return
null
;
}
}
if
(
LIVE_BUCKET
.
equals
(
bucketName
))
if
(
LIVE_BUCKET
.
equals
(
bucketName
))
{
return
MP4_TEMPLATE_ID_BJ
;
return
MP4_TEMPLATE_ID_BJ
;
else
}
else
{
return
MP4_TEMPLATE_ID
;
return
MP4_TEMPLATE_ID
;
}
}
}
/**
/**
* 获取视频转码模板ID
* 获取视频转码模板ID
...
@@ -509,13 +585,14 @@ public class AliyunConstant {
...
@@ -509,13 +585,14 @@ public class AliyunConstant {
if
(
StringUtil
.
isEmpty
(
outFileType
))
{
if
(
StringUtil
.
isEmpty
(
outFileType
))
{
return
null
;
return
null
;
}
}
if
(
LIVE_BUCKET
.
equals
(
bucketName
))
if
(
LIVE_BUCKET
.
equals
(
bucketName
))
{
return
MP4_TEMPLATE_ID_BJ
;
return
MP4_TEMPLATE_ID_BJ
;
else
if
(
"m3u8"
.
equalsIgnoreCase
(
outFileType
))
}
else
if
(
"m3u8"
.
equalsIgnoreCase
(
outFileType
))
{
return
M3U8_TEMPLATE_ID
;
return
M3U8_TEMPLATE_ID
;
else
}
else
{
return
MP4_TEMPLATE_ID
;
return
MP4_TEMPLATE_ID
;
}
}
}
/**
/**
* 获取文件CDN地址
* 获取文件CDN地址
...
@@ -527,13 +604,14 @@ public class AliyunConstant {
...
@@ -527,13 +604,14 @@ public class AliyunConstant {
if
(
StringUtil
.
isEmpty
(
bucketName
))
{
if
(
StringUtil
.
isEmpty
(
bucketName
))
{
return
null
;
return
null
;
}
}
if
(
LIVE_BUCKET
.
equals
(
bucketName
))
if
(
LIVE_BUCKET
.
equals
(
bucketName
))
{
return
FILE_CDN_URL_LIVE
;
return
FILE_CDN_URL_LIVE
;
else
if
(
BY_BUCKET
.
equals
(
bucketName
))
}
else
if
(
BY_BUCKET
.
equals
(
bucketName
))
{
return
FILE_CDN_URL_BY
;
return
FILE_CDN_URL_BY
;
else
}
else
{
return
FILE_CDN_URL
;
return
FILE_CDN_URL
;
}
}
}
/**
/**
* 获取OSS原始地址
* 获取OSS原始地址
...
@@ -545,13 +623,14 @@ public class AliyunConstant {
...
@@ -545,13 +623,14 @@ public class AliyunConstant {
if
(
StringUtil
.
isEmpty
(
bucketName
))
{
if
(
StringUtil
.
isEmpty
(
bucketName
))
{
return
null
;
return
null
;
}
}
if
(
LIVE_BUCKET
.
equals
(
bucketName
))
if
(
LIVE_BUCKET
.
equals
(
bucketName
))
{
return
LIVE_ORIGINAL_URL
;
return
LIVE_ORIGINAL_URL
;
else
if
(
BY_BUCKET
.
equals
(
bucketName
))
}
else
if
(
BY_BUCKET
.
equals
(
bucketName
))
{
return
BY_ORIGINAL_URL
;
return
BY_ORIGINAL_URL
;
else
}
else
{
return
FILE_ORIGINAL_URL
;
return
FILE_ORIGINAL_URL
;
}
}
}
/**
/**
* 获取OSS EndPoint地址
* 获取OSS EndPoint地址
...
@@ -563,10 +642,11 @@ public class AliyunConstant {
...
@@ -563,10 +642,11 @@ public class AliyunConstant {
if
(
StringUtil
.
isEmpty
(
bucketName
))
{
if
(
StringUtil
.
isEmpty
(
bucketName
))
{
return
null
;
return
null
;
}
}
if
(
LIVE_BUCKET
.
equals
(
bucketName
))
if
(
LIVE_BUCKET
.
equals
(
bucketName
))
{
return
OSS_ENDPOINT_BJ
;
return
OSS_ENDPOINT_BJ
;
else
}
else
{
return
OSS_ENDPOINT
;
return
OSS_ENDPOINT
;
}
}
}
}
}
pcloud-common/src/main/java/com/pcloud/common/utils/aliyun/OssUtils.java
View file @
0e78c657
package
com
.
pcloud
.
common
.
utils
.
aliyun
;
package
com
.
pcloud
.
common
.
utils
.
aliyun
;
import
java.io.ByteArrayInputStream
;
import
com.google.gson.Gson
;
import
java.io.ByteArrayOutputStream
;
import
java.io.File
;
import
com.huawei.mpc.client.MpcClient
;
import
java.io.InputStream
;
import
com.huawei.mpc.client.MpcConfig
;
import
java.io.UnsupportedEncodingException
;
import
com.huawei.mpc.model.ObsObjInfo
;
import
java.math.BigDecimal
;
import
com.huawei.mpc.model.thumbnail.CreateThumbnailRequest
;
import
java.net.URLDecoder
;
import
com.huawei.mpc.model.thumbnail.CreateThumbnailResponse
;
import
java.net.URLEncoder
;
import
com.huawei.mpc.model.thumbnail.QueryThumbTaskRequest
;
import
java.util.List
;
import
com.huawei.mpc.model.thumbnail.QueryThumbTaskResponse
;
import
com.huawei.mpc.model.transcoding.CreateTranscodingRequest
;
import
org.apache.commons.codec.binary.Base64
;
import
com.huawei.mpc.model.transcoding.CreateTranscodingResponse
;
import
org.slf4j.Logger
;
import
com.huawei.mpc.model.transcoding.QueryTranscodingRequest
;
import
org.slf4j.LoggerFactory
;
import
com.huawei.mpc.model.transcoding.QueryTranscodingResponse
;
import
com.huawei.mpc.model.transcoding.TextWatermark
;
import
com.alibaba.fastjson.JSON
;
import
com.obs.services.ObsClient
;
import
com.alibaba.fastjson.JSONArray
;
import
com.obs.services.internal.utils.ServiceUtils
;
import
com.alibaba.fastjson.JSONObject
;
import
com.obs.services.model.DownloadFileRequest
;
import
com.aliyun.oss.OSSClient
;
import
com.obs.services.model.DownloadFileResult
;
import
com.aliyun.oss.common.utils.BinaryUtil
;
import
com.obs.services.model.GetObjectRequest
;
import
com.aliyun.oss.common.utils.IOUtils
;
import
com.obs.services.model.ObjectMetadata
;
import
com.aliyun.oss.model.GenericResult
;
import
com.obs.services.model.ObsObject
;
import
com.aliyun.oss.model.GetObjectRequest
;
import
com.obs.services.model.TemporarySignatureRequest
;
import
com.aliyun.oss.model.OSSObject
;
import
com.obs.services.model.TemporarySignatureResponse
;
import
com.aliyun.oss.model.ObjectMetadata
;
import
com.obs.services.model.UploadFileRequest
;
import
com.aliyun.oss.model.ProcessObjectRequest
;
import
com.aliyun.oss.model.UploadFileRequest
;
import
com.aliyuncs.DefaultAcsClient
;
import
com.aliyuncs.mts.model.v20140618.QueryJobListRequest
;
import
com.aliyuncs.mts.model.v20140618.QueryJobListResponse
;
import
com.aliyuncs.mts.model.v20140618.QueryJobListResponse.Job
;
import
com.aliyuncs.mts.model.v20140618.QueryJobListResponse.Job.Output.Properties.Streams.AudioStream
;
import
com.aliyuncs.mts.model.v20140618.QueryJobListResponse.Job.Output.Properties.Streams.VideoStream
;
import
com.aliyuncs.mts.model.v20140618.SubmitJobsRequest
;
import
com.aliyuncs.mts.model.v20140618.SubmitJobsResponse
;
import
com.aliyuncs.mts.model.v20140618.SubmitMediaInfoJobRequest
;
import
com.aliyuncs.mts.model.v20140618.SubmitMediaInfoJobResponse
;
import
com.aliyuncs.mts.model.v20140618.SubmitMediaInfoJobResponse.MediaInfoJob.Properties.Format
;
import
com.aliyuncs.mts.model.v20140618.SubmitSnapshotJobRequest
;
import
com.aliyuncs.mts.model.v20140618.SubmitSnapshotJobResponse.SnapshotJob
;
import
com.aliyuncs.profile.DefaultProfile
;
import
com.pcloud.common.constant.AliyunConstant
;
import
com.pcloud.common.constant.AliyunConstant
;
import
com.pcloud.common.constant.FilePathConstant
;
import
com.pcloud.common.constant.FilePathConstant
;
import
com.pcloud.common.constant.UrlConstant
;
import
com.pcloud.common.constant.UrlConstant
;
...
@@ -55,7 +39,6 @@ import com.pcloud.common.exceptions.FileException;
...
@@ -55,7 +39,6 @@ import com.pcloud.common.exceptions.FileException;
import
com.pcloud.common.utils.DateUtils
;
import
com.pcloud.common.utils.DateUtils
;
import
com.pcloud.common.utils.FileUtils
;
import
com.pcloud.common.utils.FileUtils
;
import
com.pcloud.common.utils.ImageUtils
;
import
com.pcloud.common.utils.ImageUtils
;
import
com.pcloud.common.utils.ListUtils
;
import
com.pcloud.common.utils.LocalDateUtils
;
import
com.pcloud.common.utils.LocalDateUtils
;
import
com.pcloud.common.utils.UUIDUitl
;
import
com.pcloud.common.utils.UUIDUitl
;
import
com.pcloud.common.utils.encode.ZSEncode
;
import
com.pcloud.common.utils.encode.ZSEncode
;
...
@@ -64,10 +47,30 @@ import com.pcloud.common.utils.rsa.MD5;
...
@@ -64,10 +47,30 @@ import com.pcloud.common.utils.rsa.MD5;
import
com.pcloud.common.utils.string.StringTools
;
import
com.pcloud.common.utils.string.StringTools
;
import
com.pcloud.common.utils.string.StringUtil
;
import
com.pcloud.common.utils.string.StringUtil
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
java.io.ByteArrayInputStream
;
import
java.io.ByteArrayOutputStream
;
import
java.io.File
;
import
java.io.FileOutputStream
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.math.BigDecimal
;
import
java.net.URLDecoder
;
import
java.net.URLEncoder
;
import
java.util.ArrayList
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
cn.hutool.core.codec.Base64
;
import
lombok.SneakyThrows
;
/**
/**
* @描述:
* @描述:
* @作者:
songx
* @作者:
zyj
* @创建时间:20
17年6月26日,下午12:03:44 @版本:1.0
* @创建时间:20
20年6月2日
*/
*/
public
class
OssUtils
{
public
class
OssUtils
{
...
@@ -79,12 +82,12 @@ public class OssUtils {
...
@@ -79,12 +82,12 @@ public class OssUtils {
/**
/**
* ACS客户端,华东地区
* ACS客户端,华东地区
*/
*/
private
static
DefaultAcsClient
acsClient
;
private
static
MpcClient
acsClient
;
/**
/**
* ACS客户端,华北地区
* ACS客户端,华北地区
*/
*/
private
static
DefaultAcsClient
acsClientBj
;
private
static
MpcClient
acsClientBj
;
/**
/**
* 获取ACS客户端
* 获取ACS客户端
...
@@ -92,25 +95,29 @@ public class OssUtils {
...
@@ -92,25 +95,29 @@ public class OssUtils {
* @param bucketName
* @param bucketName
* @return
* @return
*/
*/
private
static
DefaultAcsClient
initAcsClient
(
String
bucketName
)
{
private
static
MpcClient
initAcsClient
(
String
bucketName
)
{
try
{
try
{
String
mtsRegion
=
AliyunConstant
.
getMtsRegion
(
bucketName
);
MpcConfig
mpcConfig
=
new
MpcConfig
();
DefaultProfile
.
addEndpoint
(
mtsRegion
,
mtsRegion
,
"Mts"
,
AliyunConstant
.
getMtsEndPoint
(
bucketName
));
mpcConfig
.
setEndPoint
(
AliyunConstant
.
getMtsEndPoint
(
bucketName
));
// 设置转码节点地址
return
new
DefaultAcsClient
(
DefaultProfile
.
getProfile
(
mtsRegion
,
AliyunConstant
.
MAIN_ACCESS_KEY_ID
,
mpcConfig
.
setProjectId
(
AliyunConstant
.
PROJECT_ID
);
// 设置用户项目编号ProjectId
AliyunConstant
.
MAIN_ACCESS_KEY_SECRET
));
mpcConfig
.
setSk
(
AliyunConstant
.
MtsSK
);
// 设置sk
mpcConfig
.
setAk
(
AliyunConstant
.
MtsAK
);
// 设置ak
MpcClient
mpcClient
=
new
MpcClient
(
mpcConfig
);
return
mpcClient
;
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
"【aliOSS】初始化媒体转码ACS客户端失败:"
+
e
.
getMessage
(),
e
);
LOGGER
.
error
(
"【aliOSS】初始化媒体转码ACS客户端失败:"
+
e
.
getMessage
(),
e
);
throw
new
FileException
(
FileException
.
FILE_READ_FAILURE
,
"初始化Acs客户端失败"
);
throw
new
FileException
(
FileException
.
FILE_READ_FAILURE
,
"初始化Acs客户端失败"
);
}
}
}
}
/**
/**
* 获取ACS客户端
* 获取ACS客户端
*
*
* @param bucketName
* @param bucketName
* @return
* @return
*/
*/
private
static
DefaultAcsClient
getAcsClient
(
String
bucketName
)
{
private
static
MpcClient
getAcsClient
(
String
bucketName
)
{
if
(
AliyunConstant
.
LIVE_BUCKET
.
equals
(
bucketName
))
{
if
(
AliyunConstant
.
LIVE_BUCKET
.
equals
(
bucketName
))
{
if
(
acsClientBj
==
null
)
{
if
(
acsClientBj
==
null
)
{
acsClientBj
=
initAcsClient
(
bucketName
);
acsClientBj
=
initAcsClient
(
bucketName
);
...
@@ -215,12 +222,12 @@ public class OssUtils {
...
@@ -215,12 +222,12 @@ public class OssUtils {
* @return
* @return
* @throws FileException
* @throws FileException
*/
*/
private
static
OSSFileDO
uploadFileStream2OSS
(
InputStream
is
,
String
bucketName
,
String
objectKey
)
@SneakyThrows
throws
FileException
{
private
static
OSSFileDO
uploadFileStream2OSS
(
InputStream
is
,
String
bucketName
,
String
objectKey
)
{
if
(
is
==
null
)
{
if
(
is
==
null
)
{
throw
new
FileException
(
FileException
.
FILE_CONTENT_NOT_EXIST
,
"InputStream is null!"
);
throw
new
FileException
(
FileException
.
FILE_CONTENT_NOT_EXIST
,
"InputStream is null!"
);
}
}
O
SSClient
client
=
getOSSClient
(
bucketName
);
O
bsClient
client
=
getOSSClient
(
bucketName
);
OSSFileDO
ossFileDO
=
null
;
OSSFileDO
ossFileDO
=
null
;
try
{
try
{
client
.
putObject
(
bucketName
,
objectKey
,
is
);
client
.
putObject
(
bucketName
,
objectKey
,
is
);
...
@@ -231,7 +238,11 @@ public class OssUtils {
...
@@ -231,7 +238,11 @@ public class OssUtils {
LOGGER
.
error
(
"【aliOSS】上传文件失败:"
+
e
.
getMessage
(),
e
);
LOGGER
.
error
(
"【aliOSS】上传文件失败:"
+
e
.
getMessage
(),
e
);
throw
new
FileException
(
FileException
.
FILE_UPLOAD_FAILURE
,
"上传文件失败"
);
throw
new
FileException
(
FileException
.
FILE_UPLOAD_FAILURE
,
"上传文件失败"
);
}
finally
{
}
finally
{
client
.
shutdown
();
client
.
close
();
}
//oss%2Ftranscode%2Faudio%2Fmp3%2Ftest_20200529150529182.mp3
if
(!
StringUtil
.
isEmpty
(
ossFileDO
.
getObject
())
&&
ossFileDO
.
getObject
().
contains
(
"%2F"
)){
ossFileDO
.
setObject
(
ossFileDO
.
getObject
().
replace
(
"%2F"
,
"/"
));
}
}
return
ossFileDO
;
return
ossFileDO
;
}
}
...
@@ -244,12 +255,13 @@ public class OssUtils {
...
@@ -244,12 +255,13 @@ public class OssUtils {
* @param objectKey
* @param objectKey
* @return
* @return
*/
*/
@SneakyThrows
private
static
OSSFileDO
uploadPointFile2OSS
(
String
filePath
,
String
bucketName
,
String
objectKey
)
private
static
OSSFileDO
uploadPointFile2OSS
(
String
filePath
,
String
bucketName
,
String
objectKey
)
throws
FileException
{
throws
FileException
{
if
(
filePath
==
null
)
{
if
(
filePath
==
null
)
{
throw
new
RuntimeException
(
"filePath is null!"
);
throw
new
RuntimeException
(
"filePath is null!"
);
}
}
O
SSClient
ossClient
=
getOSSClient
(
bucketName
);
O
bsClient
ossClient
=
getOSSClient
(
bucketName
);
OSSFileDO
ossFileDO
=
null
;
OSSFileDO
ossFileDO
=
null
;
try
{
try
{
// 设置断点续传请求
// 设置断点续传请求
...
@@ -270,13 +282,55 @@ public class OssUtils {
...
@@ -270,13 +282,55 @@ public class OssUtils {
LOGGER
.
error
(
"【aliOSS】上传文件失败:"
+
e
.
getMessage
(),
e
);
LOGGER
.
error
(
"【aliOSS】上传文件失败:"
+
e
.
getMessage
(),
e
);
throw
new
FileException
(
FileException
.
FILE_UPLOAD_FAILURE
,
"上传文件失败"
);
throw
new
FileException
(
FileException
.
FILE_UPLOAD_FAILURE
,
"上传文件失败"
);
}
finally
{
}
finally
{
ossClient
.
shutdown
();
ossClient
.
close
();
}
//oss%2Ftranscode%2Faudio%2Fmp3%2Ftest_20200529150529182.mp3
if
(!
StringUtil
.
isEmpty
(
ossFileDO
.
getObject
())
&&
ossFileDO
.
getObject
().
contains
(
"%2F"
)){
ossFileDO
.
setObject
(
ossFileDO
.
getObject
().
replace
(
"%2F"
,
"/"
));
}
}
return
ossFileDO
;
return
ossFileDO
;
}
}
/**
/**
* 提交MP4转码作业
* 断点续传上传文件到aliOSS
*
* @param filePath
* @param bucketName
* @param objectKey
* @return
*/
@SneakyThrows
private
static
DownloadFileResult
downloadPointFile2OSS
(
String
filePath
,
String
outFilePath
,
String
bucketName
,
String
objectKey
)
throws
FileException
{
if
(
filePath
==
null
)
{
throw
new
RuntimeException
(
"filePath is null!"
);
}
ObsClient
ossClient
=
getOSSClient
(
bucketName
);
DownloadFileResult
result
=
null
;
try
{
// 创建ObsClient实例
ObsClient
obsClient
=
getOSSClient
(
bucketName
);
DownloadFileRequest
request
=
new
DownloadFileRequest
(
bucketName
,
objectKey
);
// 设置下载对象的本地文件路径
request
.
setDownloadFile
(
outFilePath
);
// 设置分段下载时的最大并发数
request
.
setTaskNum
(
5
);
// 设置分段大小为10MB
request
.
setPartSize
(
10
*
1024
*
1024
);
// 开启断点续传模式
request
.
setEnableCheckpoint
(
true
);
// 进行断点续传下载
result
=
obsClient
.
downloadFile
(
request
);
}
catch
(
Throwable
e
)
{
LOGGER
.
error
(
"【aliOSS】下载文件失败:"
+
e
.
getMessage
(),
e
);
throw
new
FileException
(
FileException
.
FILE_UPLOAD_FAILURE
,
"上传文件失败"
);
}
finally
{
ossClient
.
close
();
}
return
result
;
}
/**
* 提交MP4转码作业 new
*
*
* @param fileName 源文件的名称不带后缀,可为null
* @param fileName 源文件的名称不带后缀,可为null
* @param filePath 源文件本地路径
* @param filePath 源文件本地路径
...
@@ -289,7 +343,7 @@ public class OssUtils {
...
@@ -289,7 +343,7 @@ public class OssUtils {
}
}
/**
/**
* 提交MP4转码作业
* 提交MP4转码作业
new
*
*
* @param fileName
* @param fileName
* @param filePath
* @param filePath
...
@@ -302,12 +356,12 @@ public class OssUtils {
...
@@ -302,12 +356,12 @@ public class OssUtils {
String
inObjectKey
=
getInObjectKey
(
AliyunEnum
.
TRANSCODE
,
fileName
,
fileType
);
String
inObjectKey
=
getInObjectKey
(
AliyunEnum
.
TRANSCODE
,
fileName
,
fileType
);
String
inputBucketName
=
AliyunConstant
.
INPUT_BUCKET
;
String
inputBucketName
=
AliyunConstant
.
INPUT_BUCKET
;
OSSFileDO
ossFileDO
=
uploadPointFile2OSS
(
filePath
,
inputBucketName
,
inObjectKey
);
OSSFileDO
ossFileDO
=
uploadPointFile2OSS
(
filePath
,
inputBucketName
,
inObjectKey
);
String
outObjectKey
=
get
OutObjectKey
(
AliyunEnum
.
TRANSCODE
,
null
,
"mp4"
);
String
outObjectKey
=
get
TranscodeOutObjectKey
(
AliyunEnum
.
TRANSCODE
,
"mp4"
);
return
transcodeJob
(
ossFileDO
,
AliyunConstant
.
getMp4TemplateId
(
inputBucketName
),
outObjectKey
,
null
,
null
);
return
transcodeJob
(
ossFileDO
,
AliyunConstant
.
getMp4TemplateId
(
inputBucketName
),
outObjectKey
,
null
,
null
);
}
}
/**
/**
* 提交MP4转码作业,文件流方式
* 提交MP4转码作业,文件流方式
new
*
*
* @param buff 源文件流
* @param buff 源文件流
* @param fileName 源文件的名称不带后缀,可为null
* @param fileName 源文件的名称不带后缀,可为null
...
@@ -319,14 +373,14 @@ public class OssUtils {
...
@@ -319,14 +373,14 @@ public class OssUtils {
String
inObjectKey
=
getInObjectKey
(
AliyunEnum
.
TRANSCODE
,
fileName
,
fileType
);
String
inObjectKey
=
getInObjectKey
(
AliyunEnum
.
TRANSCODE
,
fileName
,
fileType
);
String
inputBucketName
=
AliyunConstant
.
INPUT_BUCKET
;
String
inputBucketName
=
AliyunConstant
.
INPUT_BUCKET
;
OSSFileDO
inputFile
=
uploadFileStream2OSS
(
new
ByteArrayInputStream
(
buff
),
inputBucketName
,
inObjectKey
);
OSSFileDO
inputFile
=
uploadFileStream2OSS
(
new
ByteArrayInputStream
(
buff
),
inputBucketName
,
inObjectKey
);
String
outObjectKey
=
get
OutObjectKey
(
AliyunEnum
.
TRANSCODE
,
null
,
"mp4"
);
String
outObjectKey
=
get
TranscodeOutObjectKey
(
AliyunEnum
.
TRANSCODE
,
"mp4"
);
String
[]
result
=
transcodeJob
(
inputFile
,
AliyunConstant
.
getMp4TemplateId
(
inputBucketName
),
outObjectKey
,
null
,
String
[]
result
=
transcodeJob
(
inputFile
,
AliyunConstant
.
getMp4TemplateId
(
inputBucketName
),
outObjectKey
,
null
,
null
);
null
);
return
result
[
0
];
return
result
[
0
];
}
}
/**
/**
* 提交MP3转码作业
* 提交MP3转码作业
new
*
*
* @param fileName 源文件的名称不带后缀,可为null
* @param fileName 源文件的名称不带后缀,可为null
* @param filePath 源文件本地路径
* @param filePath 源文件本地路径
...
@@ -339,7 +393,7 @@ public class OssUtils {
...
@@ -339,7 +393,7 @@ public class OssUtils {
}
}
/**
/**
* 提交MP3转码作业
* 提交MP3转码作业
new
*
*
* @param fileName
* @param fileName
* @param filePath
* @param filePath
...
@@ -352,12 +406,12 @@ public class OssUtils {
...
@@ -352,12 +406,12 @@ public class OssUtils {
String
inObjectKey
=
getInObjectKey
(
AliyunEnum
.
TRANSCODE
,
fileName
,
fileType
);
String
inObjectKey
=
getInObjectKey
(
AliyunEnum
.
TRANSCODE
,
fileName
,
fileType
);
String
inputBucketName
=
AliyunConstant
.
INPUT_BUCKET
;
String
inputBucketName
=
AliyunConstant
.
INPUT_BUCKET
;
OSSFileDO
ossFileDO
=
uploadPointFile2OSS
(
filePath
,
AliyunConstant
.
INPUT_BUCKET
,
inObjectKey
);
OSSFileDO
ossFileDO
=
uploadPointFile2OSS
(
filePath
,
AliyunConstant
.
INPUT_BUCKET
,
inObjectKey
);
String
outObjectKey
=
get
OutObjectKey
(
AliyunEnum
.
TRANSCODE
,
null
,
"mp3"
);
String
outObjectKey
=
get
TranscodeOutObjectKey
(
AliyunEnum
.
TRANSCODE
,
"mp3"
);
return
transcodeJob
(
ossFileDO
,
AliyunConstant
.
getMp3TemplateId
(
inputBucketName
),
outObjectKey
,
null
,
null
);
return
transcodeJob
(
ossFileDO
,
AliyunConstant
.
getMp3TemplateId
(
inputBucketName
),
outObjectKey
,
null
,
null
);
}
}
/**
/**
* 提交MP3转码作业,文件流方式 <br/> 使用byte[]方式上传,文件流上传容易导致读取长度0,造成转码失败
* 提交MP3转码作业,文件流方式 <br/> 使用byte[]方式上传,文件流上传容易导致读取长度0,造成转码失败
new
*
*
* @param is 源文件流
* @param is 源文件流
* @param fileName 源文件的名称不带后缀,可为null
* @param fileName 源文件的名称不带后缀,可为null
...
@@ -369,14 +423,14 @@ public class OssUtils {
...
@@ -369,14 +423,14 @@ public class OssUtils {
String
inObjectKey
=
getInObjectKey
(
AliyunEnum
.
TRANSCODE
,
fileName
,
fileType
);
String
inObjectKey
=
getInObjectKey
(
AliyunEnum
.
TRANSCODE
,
fileName
,
fileType
);
String
inputBucketName
=
AliyunConstant
.
INPUT_BUCKET
;
String
inputBucketName
=
AliyunConstant
.
INPUT_BUCKET
;
OSSFileDO
inputFile
=
uploadFileStream2OSS
(
is
,
inputBucketName
,
inObjectKey
);
OSSFileDO
inputFile
=
uploadFileStream2OSS
(
is
,
inputBucketName
,
inObjectKey
);
String
outObjectKey
=
get
OutObjectKey
(
AliyunEnum
.
TRANSCODE
,
null
,
"mp3"
);
String
outObjectKey
=
get
TranscodeOutObjectKey
(
AliyunEnum
.
TRANSCODE
,
"mp3"
);
String
[]
result
=
transcodeJob
(
inputFile
,
AliyunConstant
.
getMp3TemplateId
(
inputBucketName
),
outObjectKey
,
null
,
String
[]
result
=
transcodeJob
(
inputFile
,
AliyunConstant
.
getMp3TemplateId
(
inputBucketName
),
outObjectKey
,
null
,
null
);
null
);
return
result
[
0
];
return
result
[
0
];
}
}
/**
/**
* 提交MP3转码作业
* 提交MP3转码作业
new
*
*
* @param buff 文件
* @param buff 文件
* @param fileName 源文件的名称不带后缀,可为null
* @param fileName 源文件的名称不带后缀,可为null
...
@@ -389,14 +443,14 @@ public class OssUtils {
...
@@ -389,14 +443,14 @@ public class OssUtils {
String
inObjectKey
=
getInObjectKey
(
AliyunEnum
.
TRANSCODE
,
fileName
,
fileType
);
String
inObjectKey
=
getInObjectKey
(
AliyunEnum
.
TRANSCODE
,
fileName
,
fileType
);
String
inputBucketName
=
AliyunConstant
.
INPUT_BUCKET
;
String
inputBucketName
=
AliyunConstant
.
INPUT_BUCKET
;
OSSFileDO
inputFile
=
uploadFileStream2OSS
(
new
ByteArrayInputStream
(
buff
),
inputBucketName
,
inObjectKey
);
OSSFileDO
inputFile
=
uploadFileStream2OSS
(
new
ByteArrayInputStream
(
buff
),
inputBucketName
,
inObjectKey
);
String
outObjectKey
=
get
OutObjectKey
(
AliyunEnum
.
TRANSCODE
,
null
,
"mp3"
);
String
outObjectKey
=
get
TranscodeOutObjectKey
(
AliyunEnum
.
TRANSCODE
,
"mp3"
);
String
[]
result
=
transcodeJob
(
inputFile
,
AliyunConstant
.
getMp3TemplateId
(
inputBucketName
),
outObjectKey
,
null
,
String
[]
result
=
transcodeJob
(
inputFile
,
AliyunConstant
.
getMp3TemplateId
(
inputBucketName
),
outObjectKey
,
null
,
null
);
null
);
return
result
[
0
];
return
result
[
0
];
}
}
/**
/**
* 转码作业,同步的方式
* 转码作业,同步的方式
new
*
*
* @param fileUrl
* @param fileUrl
* @return
* @return
...
@@ -409,7 +463,7 @@ public class OssUtils {
...
@@ -409,7 +463,7 @@ public class OssUtils {
}
}
/**
/**
* 转码作业
* 转码作业
new
*
*
* @param fileName 文件名称
* @param fileName 文件名称
* @param filePath 文件地址
* @param filePath 文件地址
...
@@ -422,7 +476,7 @@ public class OssUtils {
...
@@ -422,7 +476,7 @@ public class OssUtils {
}
}
/**
/**
* 转码作业
* 转码作业
new
*
*
* @param fileName
* @param fileName
* @param fileUrl 文件地址
* @param fileUrl 文件地址
...
@@ -441,7 +495,7 @@ public class OssUtils {
...
@@ -441,7 +495,7 @@ public class OssUtils {
}
}
/**
/**
* 已经存在于OSS中的文件转码
* 已经存在于OSS中的文件转码
new
*
*
* @param fileUrl
* @param fileUrl
* @param fileName
* @param fileName
...
@@ -459,13 +513,13 @@ public class OssUtils {
...
@@ -459,13 +513,13 @@ public class OssUtils {
OSSFileDO
ossFileDO
=
new
OSSFileDO
(
AliyunConstant
.
getOssRegion
(
inputBucketName
),
inputBucketName
,
inObjectKey
);
OSSFileDO
ossFileDO
=
new
OSSFileDO
(
AliyunConstant
.
getOssRegion
(
inputBucketName
),
inputBucketName
,
inObjectKey
);
if
(
FileUtils
.
VIDEO
.
equals
(
FileUtils
.
getGatherName
(
fileType
)))
{
if
(
FileUtils
.
VIDEO
.
equals
(
FileUtils
.
getGatherName
(
fileType
)))
{
outFileType
=
StringUtil
.
isEmpty
(
outFileType
)
?
"mp4"
:
outFileType
;
outFileType
=
StringUtil
.
isEmpty
(
outFileType
)
?
"mp4"
:
outFileType
;
String
outObjectKey
=
get
OutObjectKey
(
AliyunEnum
.
TRANSCODE
,
fileName
,
outFileType
);
String
outObjectKey
=
get
TranscodeOutObjectKey
(
AliyunEnum
.
TRANSCODE
,
outFileType
);
// 组装水印参数
// 组装水印参数
JSONArray
waterMarkConfigArray
=
getWaterMarkConfig
(
waterMarkContent
);
CreateTranscodingRequest
.
Watermark
[]
waterMarkConfigArray
=
getWaterMarkConfig
(
waterMarkContent
);
result
=
transcodeJob
(
ossFileDO
,
AliyunConstant
.
getVideoTemplateId
(
inputBucketName
,
outFileType
),
result
=
transcodeJob
(
ossFileDO
,
AliyunConstant
.
getVideoTemplateId
(
inputBucketName
,
outFileType
),
outObjectKey
,
waterMarkConfigArray
,
null
);
outObjectKey
,
waterMarkConfigArray
,
null
);
}
else
if
(
FileUtils
.
AUDIO
.
equals
(
FileUtils
.
getGatherName
(
fileType
)))
{
}
else
if
(
FileUtils
.
AUDIO
.
equals
(
FileUtils
.
getGatherName
(
fileType
)))
{
String
outObjectKey
=
get
OutObjectKey
(
AliyunEnum
.
TRANSCODE
,
fileName
,
"mp3"
);
String
outObjectKey
=
get
TranscodeOutObjectKey
(
AliyunEnum
.
TRANSCODE
,
"mp3"
);
result
=
transcodeJob
(
ossFileDO
,
AliyunConstant
.
getMp3TemplateId
(
inputBucketName
),
outObjectKey
,
null
,
result
=
transcodeJob
(
ossFileDO
,
AliyunConstant
.
getMp3TemplateId
(
inputBucketName
),
outObjectKey
,
null
,
null
);
null
);
}
}
...
@@ -473,7 +527,7 @@ public class OssUtils {
...
@@ -473,7 +527,7 @@ public class OssUtils {
}
}
/**
/**
* 不存在于OSS中的文件转码,要先上传
* 不存在于OSS中的文件转码,要先上传
new
*
*
* @param fileUrl
* @param fileUrl
* @param fileName
* @param fileName
...
@@ -512,7 +566,7 @@ public class OssUtils {
...
@@ -512,7 +566,7 @@ public class OssUtils {
* @return
* @return
* @throws FileException
* @throws FileException
*/
*/
public
static
String
submitMergeJob
(
String
fileUrl
,
List
<
String
>
mergeUrls
)
throws
FileException
{
/* public static String submitMergeJob(String fileUrl, List<String> mergeUrls) throws FileException {
LOGGER.info("【aliOSS】提交合并作业.<START>.[fileUrl]=" + fileUrl + ",[mergeUrls]=" + mergeUrls);
LOGGER.info("【aliOSS】提交合并作业.<START>.[fileUrl]=" + fileUrl + ",[mergeUrls]=" + mergeUrls);
String fileType = FileUtils.getFileType(fileUrl);
String fileType = FileUtils.getFileType(fileUrl);
if (ListUtils.isEmpty(mergeUrls)) {
if (ListUtils.isEmpty(mergeUrls)) {
...
@@ -535,7 +589,7 @@ public class OssUtils {
...
@@ -535,7 +589,7 @@ public class OssUtils {
String[] result = transcodeJob(ossFileDO, templateId, outObjectKey, null, mergeUrls);
String[] result = transcodeJob(ossFileDO, templateId, outObjectKey, null, mergeUrls);
LOGGER.info("【aliOSS】提交合并作业.<END>.[result]=" + JSON.toJSONString(result));
LOGGER.info("【aliOSS】提交合并作业.<END>.[result]=" + JSON.toJSONString(result));
return result[0];
return result[0];
}
}
*/
/**
/**
* 视频文件合并,同步方法
* 视频文件合并,同步方法
...
@@ -545,11 +599,11 @@ public class OssUtils {
...
@@ -545,11 +599,11 @@ public class OssUtils {
* @return
* @return
* @throws FileException
* @throws FileException
*/
*/
public
static
UploadResultInfo
submitMergeJobMp4Sync
(
String
fileUrl
,
List
<
String
>
mergeUrls
)
throws
FileException
{
/* public static UploadResultInfo submitMergeJobMp4Sync(String fileUrl, List<String> mergeUrls) throws FileException {
String bucketName = AliyunConstant.getBucketName(fileUrl);
String bucketName = AliyunConstant.getBucketName(fileUrl);
String jobId = submitMergeJob(fileUrl, mergeUrls);
String jobId = submitMergeJob(fileUrl, mergeUrls);
return transcodeJobResultSync(jobId, bucketName);
return transcodeJobResultSync(jobId, bucketName);
}
}
*/
/**
/**
* 视频文件合并,同步方法
* 视频文件合并,同步方法
...
@@ -559,14 +613,14 @@ public class OssUtils {
...
@@ -559,14 +613,14 @@ public class OssUtils {
* @return
* @return
* @throws FileException
* @throws FileException
*/
*/
public
static
UploadResultInfo
submitMergeJobSync
(
String
fileUrl
,
List
<
String
>
mergeUrls
)
throws
FileException
{
/* public static UploadResultInfo submitMergeJobSync(String fileUrl, List<String> mergeUrls) throws FileException {
String bucketName = AliyunConstant.getBucketName(fileUrl);
String bucketName = AliyunConstant.getBucketName(fileUrl);
String jobId = submitMergeJob(fileUrl, mergeUrls);
String jobId = submitMergeJob(fileUrl, mergeUrls);
return transcodeJobResultSync(jobId, bucketName);
return transcodeJobResultSync(jobId, bucketName);
}
}
*/
/**
/**
* 同步的方式获取转码后的结果
* 同步的方式获取转码后的结果
new
*
*
* @param jobId
* @param jobId
* @return
* @return
...
@@ -596,6 +650,59 @@ public class OssUtils {
...
@@ -596,6 +650,59 @@ public class OssUtils {
/**
/**
* 转码作业
* 转码作业
* * @param null
*/
private
static
String
[]
transcodeJob
(
OSSFileDO
inputFile
,
String
templateId
,
String
outObjectKey
,
CreateTranscodingRequest
.
Watermark
[]
watermarkArray
,
List
<
String
>
mergeUrls
){
// 媒体处理服务构造方法
MpcClient
mpcClient
=
getAcsClient
(
inputFile
.
getBucket
());
//设置媒体处理服务请求参数
CreateTranscodingRequest
createTranscodingRequest
=
new
CreateTranscodingRequest
();
//设置转码的输入文件路径参数,可通过华为云OBS对象存储服务控制台查看。
ObsObjInfo
input
=
new
ObsObjInfo
();
//设置输入桶名
input
.
setBucket
(
inputFile
.
getBucket
());
//设置源文件路径
input
.
setObject
(
inputFile
.
getObject
());
//设置输入桶所在区域
input
.
setLocation
(
inputFile
.
getLocation
());
createTranscodingRequest
.
setInput
(
input
);
// 设置转码的输出文件路径参数,可通过华为云OBS对象存储服务控制台查看。
ObsObjInfo
output
=
new
ObsObjInfo
();
//设置输出桶名
output
.
setBucket
(
AliyunConstant
.
getOutBucket
(
input
.
getBucket
()));
//设置输出文件路径
output
.
setObject
(
outObjectKey
);
//设置输出桶所在区域
output
.
setLocation
(
inputFile
.
getLocation
());
createTranscodingRequest
.
setOutput
(
output
);
//设置转码模板ID
List
<
Long
>
transTempIds
=
new
ArrayList
<
Long
>();
transTempIds
.
add
(
Long
.
valueOf
(
templateId
));
createTranscodingRequest
.
setTransTemplateId
(
transTempIds
);
//文字水印
createTranscodingRequest
.
setWatermarks
(
watermarkArray
);
String
[]
result
=
new
String
[
2
];
try
{
//发送媒体处理服务请求
CreateTranscodingResponse
createTranscodingResponse
=
mpcClient
.
createTranscodingTask
(
createTranscodingRequest
);
//返回消息
LOGGER
.
info
(
new
Gson
().
toJson
(
createTranscodingResponse
));
result
[
0
]
=
createTranscodingResponse
.
getTaskId
();
result
[
1
]
=
getOSSUrl
(
URLDecoder
.
decode
(
outObjectKey
,
"utf-8"
),
output
.
getBucket
());
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
"【aliOSS】【ignoreLog】转码作业失败:"
+
e
.
getMessage
(),
e
);
throw
new
FileException
(
FileException
.
FILE_CONVERT_FAIL
,
"转码作业失败"
);
}
return
result
;
}
/**
* 转码作业
*
*
* @param inputFile 输入文件
* @param inputFile 输入文件
* @param templateId 转码模板
* @param templateId 转码模板
...
@@ -604,7 +711,7 @@ public class OssUtils {
...
@@ -604,7 +711,7 @@ public class OssUtils {
* @return
* @return
* @throws FileException
* @throws FileException
*/
*/
private
static
String
[]
transcodeJob
(
OSSFileDO
inputFile
,
String
templateId
,
String
outObjectKey
,
/* private static String[] transcodeJob(OSSFileDO inputFile, String templateId, String outObjectKey,
JSONArray waterMarkConfigArray, List<String> mergeUrls) throws FileException {
JSONArray waterMarkConfigArray, List<String> mergeUrls) throws FileException {
try {
try {
outObjectKey = URLEncoder.encode(outObjectKey, "utf-8");
outObjectKey = URLEncoder.encode(outObjectKey, "utf-8");
...
@@ -643,7 +750,7 @@ public class OssUtils {
...
@@ -643,7 +750,7 @@ public class OssUtils {
if (response.getJobResultList().size() != outputJobCount) {
if (response.getJobResultList().size() != outputJobCount) {
throw new RuntimeException("SubmitJobsRequest Size failed");
throw new RuntimeException("SubmitJobsRequest Size failed");
}
}
com
.
aliyuncs
.
mts
.
model
.
v20140618
.
SubmitJobsResponse
.
JobResult
.
Job
job
=
response
.
getJobResultList
().
get
(
0
)
SubmitJobsResponse.JobResult.Job job = response.getJobResultList().get(0)
.getJob();
.getJob();
result[0] = job.getJobId();
result[0] = job.getJobId();
result[1] = getOSSUrl(URLDecoder.decode(outObjectKey, "utf-8"), outputBucketName);
result[1] = getOSSUrl(URLDecoder.decode(outObjectKey, "utf-8"), outputBucketName);
...
@@ -652,7 +759,7 @@ public class OssUtils {
...
@@ -652,7 +759,7 @@ public class OssUtils {
throw new FileException(FileException.FILE_CONVERT_FAIL, "转码作业失败");
throw new FileException(FileException.FILE_CONVERT_FAIL, "转码作业失败");
}
}
return result;
return result;
}
}
*/
/**
/**
* 组装视频合并参数
* 组装视频合并参数
...
@@ -661,7 +768,7 @@ public class OssUtils {
...
@@ -661,7 +768,7 @@ public class OssUtils {
* @param bucketName
* @param bucketName
* @return
* @return
*/
*/
private
static
JSONArray
generateMergeInput
(
List
<
String
>
mergeUrls
,
String
bucketName
)
{
/*private static JSONArray generateMergeInput(List<String> mergeUrls, String bucketName) {
if (ListUtils.isEmpty(mergeUrls)) {
if (ListUtils.isEmpty(mergeUrls)) {
return null;
return null;
}
}
...
@@ -687,14 +794,14 @@ public class OssUtils {
...
@@ -687,14 +794,14 @@ public class OssUtils {
mergeInput.put("MergeList", mergeJsons);
mergeInput.put("MergeList", mergeJsons);
return mergeJsons;
return mergeJsons;
}
}
*/
/**
/**
* 组装视频水印参数
* 组装视频水印参数
*
*
* @param content
* @param content
* @return
* @return
*/
*/
private
static
JSONArray
getWaterMarkConfig
(
String
content
)
{
/* private static JSONArray getWaterMarkConfig(String content) {
if (StringUtil.isEmpty(content)) {
if (StringUtil.isEmpty(content)) {
return null;
return null;
}
}
...
@@ -702,7 +809,7 @@ public class OssUtils {
...
@@ -702,7 +809,7 @@ public class OssUtils {
waterMarkConfig.put("Type", "Text");
waterMarkConfig.put("Type", "Text");
// 组装水印文本
// 组装水印文本
JSONObject waterMarkText = new JSONObject();
JSONObject waterMarkText = new JSONObject();
waterMarkText
.
put
(
"content"
,
new
String
(
Base64
.
encode
Base64
(
content
.
getBytes
())));
waterMarkText.put("content", new String(Base64.encode
(content.getBytes())));
waterMarkText.put("FontSize", 16);
waterMarkText.put("FontSize", 16);
waterMarkText.put("Top", 2000);
waterMarkText.put("Top", 2000);
waterMarkText.put("Left", 20);
waterMarkText.put("Left", 20);
...
@@ -710,6 +817,31 @@ public class OssUtils {
...
@@ -710,6 +817,31 @@ public class OssUtils {
JSONArray waterMarkConfigArray = new JSONArray();
JSONArray waterMarkConfigArray = new JSONArray();
waterMarkConfigArray.add(waterMarkConfig);
waterMarkConfigArray.add(waterMarkConfig);
return waterMarkConfigArray;
return waterMarkConfigArray;
}*/
private
static
CreateTranscodingRequest
.
Watermark
[]
getWaterMarkConfig
(
String
content
){
if
(
StringUtil
.
isEmpty
(
content
))
{
return
null
;
}
CreateTranscodingRequest
.
Watermark
watermark
=
new
CreateTranscodingRequest
.
Watermark
();
// 文字水印内容,内容需做Base64编码,
// 示例:若想添加文字水印“测试文字水印”,那么Content的值为:5rWL6K+V5paH5a2X5rC05Y2w
watermark
.
setTextContext
(
new
String
(
Base64
.
encode
(
content
.
getBytes
())));
TextWatermark
textWatermark
=
new
TextWatermark
();
// 字体颜色。
// 目前颜色支持black,blue,white,green,red,yellow,brown,gold,pink,orange,purple。
// 默认颜色是white
textWatermark
.
setFontColor
(
"black"
);
// 字体,当前支持fzyouh、msyh
// 默认字体是msyh
textWatermark
.
setFontName
(
"fzyouh"
);
// 字体大小。默认值:16,范围:(4, 120)
textWatermark
.
setFontSize
(
16
);
watermark
.
setTextWatermark
(
textWatermark
);
List
<
CreateTranscodingRequest
.
Watermark
>
watermarks
=
new
ArrayList
<
CreateTranscodingRequest
.
Watermark
>();
watermarks
.
add
(
watermark
);
CreateTranscodingRequest
.
Watermark
[]
watermarkArray
=
new
CreateTranscodingRequest
.
Watermark
[
watermarks
.
size
()];
return
watermarks
.
toArray
(
watermarkArray
);
}
}
/**
/**
...
@@ -722,7 +854,7 @@ public class OssUtils {
...
@@ -722,7 +854,7 @@ public class OssUtils {
* @return
* @return
* @throws FileException
* @throws FileException
*/
*/
public
static
String
submitClipJob
(
String
fileName
,
String
fileUrl
,
String
seek
,
String
duration
)
/*public static String submitClipJob(String fileName, String fileUrl, String seek, String duration)
throws FileException {
throws FileException {
LOGGER.info("【aliOSS】提交音视频剪切作业.<START>.[fileUrl]=" + fileUrl + ",[seek]=" + seek + ",[duration]=" + duration);
LOGGER.info("【aliOSS】提交音视频剪切作业.<START>.[fileUrl]=" + fileUrl + ",[seek]=" + seek + ",[duration]=" + duration);
if (StringUtil.isEmpty(duration)) {
if (StringUtil.isEmpty(duration)) {
...
@@ -735,7 +867,7 @@ public class OssUtils {
...
@@ -735,7 +867,7 @@ public class OssUtils {
}
}
String resultFileUrl = "";
String resultFileUrl = "";
String outFileType = FileUtils.VIDEO.equals(gatherName) ? "mp4" : "mp3";
String outFileType = FileUtils.VIDEO.equals(gatherName) ? "mp4" : "mp3";
if
(
StringTools
.
contains
(
fileUrl
,
AliyunConstant
.
OSS_CDN_URLS
))
{
*//*if (StringTools.contains(fileUrl, AliyunConstant.OSS_CDN_URLS)) {
String inObjectKey = splitObjectKey(fileUrl);
String inObjectKey = splitObjectKey(fileUrl);
String inBucketName = fileUrlExist001(fileUrl) ? AliyunConstant.INPUT_BUCKET
String inBucketName = fileUrlExist001(fileUrl) ? AliyunConstant.INPUT_BUCKET
: AliyunConstant.getBucketName(fileUrl);
: AliyunConstant.getBucketName(fileUrl);
...
@@ -747,10 +879,10 @@ public class OssUtils {
...
@@ -747,10 +879,10 @@ public class OssUtils {
OSSFileDO ossFileDO = uploadPointFile2OSS(fileUrl, AliyunConstant.FILE_BUCKET, inObjectKey);
OSSFileDO ossFileDO = uploadPointFile2OSS(fileUrl, AliyunConstant.FILE_BUCKET, inObjectKey);
String outObjectKey = getOutObjectKey(AliyunEnum.CUT, fileName, outFileType);
String outObjectKey = getOutObjectKey(AliyunEnum.CUT, fileName, outFileType);
resultFileUrl = clipJob(ossFileDO, outObjectKey, seek, duration);
resultFileUrl = clipJob(ossFileDO, outObjectKey, seek, duration);
}
}
*//*
LOGGER.info("【aliOSS】提交音视频剪切作业.<END>.[resultFileUrl]=" + resultFileUrl);
LOGGER.info("【aliOSS】提交音视频剪切作业.<END>.[resultFileUrl]=" + resultFileUrl);
return resultFileUrl;
return resultFileUrl;
}
}
*/
/**
/**
* 提交视频剪切作业
* 提交视频剪切作业
...
@@ -763,7 +895,7 @@ public class OssUtils {
...
@@ -763,7 +895,7 @@ public class OssUtils {
* @return
* @return
* @throws FileException
* @throws FileException
*/
*/
public
static
String
submitClipJob
(
byte
[]
buff
,
String
fileName
,
String
fileType
,
String
seek
,
String
duration
)
/*public static String submitClipJob(byte[] buff, String fileName, String fileType, String seek, String duration)
throws FileException {
throws FileException {
LOGGER.info("【aliOSS】提交音视频剪切作业.<START>.[fileName]=" + fileName + ",[seek]=" + seek + ",[duration]=" + duration);
LOGGER.info("【aliOSS】提交音视频剪切作业.<START>.[fileName]=" + fileName + ",[seek]=" + seek + ",[duration]=" + duration);
fileName = MD5.getMD5StrLower(fileName);
fileName = MD5.getMD5StrLower(fileName);
...
@@ -774,7 +906,7 @@ public class OssUtils {
...
@@ -774,7 +906,7 @@ public class OssUtils {
String resultFileUrl = clipJob(inputFile, outObjectKey, seek, duration);
String resultFileUrl = clipJob(inputFile, outObjectKey, seek, duration);
LOGGER.info("【aliOSS】提交音视频剪切作业.<END>.[resultFileUrl]=" + resultFileUrl);
LOGGER.info("【aliOSS】提交音视频剪切作业.<END>.[resultFileUrl]=" + resultFileUrl);
return resultFileUrl;
return resultFileUrl;
}
}
*/
/**
/**
* 视频剪切作业
* 视频剪切作业
...
@@ -786,7 +918,7 @@ public class OssUtils {
...
@@ -786,7 +918,7 @@ public class OssUtils {
* @return
* @return
* @throws FileException
* @throws FileException
*/
*/
private
static
String
clipJob
(
OSSFileDO
inputFile
,
String
outObjectKey
,
String
seek
,
String
duration
)
/*private static String clipJob(OSSFileDO inputFile, String outObjectKey, String seek, String duration)
throws FileException {
throws FileException {
try {
try {
outObjectKey = URLEncoder.encode(outObjectKey, "utf-8");
outObjectKey = URLEncoder.encode(outObjectKey, "utf-8");
...
@@ -814,17 +946,17 @@ public class OssUtils {
...
@@ -814,17 +946,17 @@ public class OssUtils {
String object = null;
String object = null;
try {
try {
SubmitJobsResponse
response
=
getAcsClient
(
inputBucketName
).
getAcsResponse
(
request
);
*//* SubmitJobsResponse response = getAcsClient(inputBucketName).getAcsResponse(request);
if (response.getJobResultList().size() != outputJobCount) {
if (response.getJobResultList().size() != outputJobCount) {
throw new RuntimeException("SubmitJobsRequest Size failed");
throw new RuntimeException("SubmitJobsRequest Size failed");
}
}
object = response.getJobResultList().get(0).getJob().getOutput().getOutputFile().getObject();
object = response.getJobResultList().get(0).getJob().getOutput().getOutputFile().getObject();
object
=
URLDecoder
.
decode
(
object
,
"UTF-8"
);
object = URLDecoder.decode(object, "UTF-8");
*//*
} catch (Exception e) {
} catch (Exception e) {
LOGGER.error("【aliOSS】视频剪辑作业失败:" + e.getMessage(), e);
LOGGER.error("【aliOSS】视频剪辑作业失败:" + e.getMessage(), e);
}
}
return getOSSUrl(object, outputBucketName);
return getOSSUrl(object, outputBucketName);
}
}
*/
/**
/**
* 组装剪切参数
* 组装剪切参数
...
@@ -833,7 +965,7 @@ public class OssUtils {
...
@@ -833,7 +965,7 @@ public class OssUtils {
* @param duration 持续时长 sssss[.SSS]
* @param duration 持续时长 sssss[.SSS]
* @return
* @return
*/
*/
private
static
JSONObject
generateClipInput
(
String
seek
,
String
duration
)
{
/* private static JSONObject generateClipInput(String seek, String duration) {
LOGGER.info("【aliOSS】组装剪切参数.<START>.[seek]=" + seek + ",[duration]=" + duration);
LOGGER.info("【aliOSS】组装剪切参数.<START>.[seek]=" + seek + ",[duration]=" + duration);
JSONObject input = new JSONObject();
JSONObject input = new JSONObject();
input.put("Seek", seek);
input.put("Seek", seek);
...
@@ -843,7 +975,7 @@ public class OssUtils {
...
@@ -843,7 +975,7 @@ public class OssUtils {
LOGGER.info("【aliOSS】组装剪切参数.<END>");
LOGGER.info("【aliOSS】组装剪切参数.<END>");
return timeSpanObject;
return timeSpanObject;
}
}
*/
/**
/**
* 提交视频截图任务,成功返回图片地址 <br>
* 提交视频截图任务,成功返回图片地址 <br>
*
*
...
@@ -851,7 +983,7 @@ public class OssUtils {
...
@@ -851,7 +983,7 @@ public class OssUtils {
* @param time 秒
* @param time 秒
* @return 成功:图片地址,失败:null
* @return 成功:图片地址,失败:null
*/
*/
public
static
String
submitSnapshotJob
(
String
fileUrl
,
int
time
)
{
/* public static String submitSnapshotJob(String fileUrl, int time) {
LOGGER.info("【aliOSS】提交MP4截图作业,<START>.[fileUrl]=" + fileUrl);
LOGGER.info("【aliOSS】提交MP4截图作业,<START>.[fileUrl]=" + fileUrl);
String fileType = FileUtils.getFileType(fileUrl);
String fileType = FileUtils.getFileType(fileUrl);
if (!FileUtils.VIDEO.equals(FileUtils.getGatherName(fileType))) {
if (!FileUtils.VIDEO.equals(FileUtils.getGatherName(fileType))) {
...
@@ -869,7 +1001,8 @@ public class OssUtils {
...
@@ -869,7 +1001,8 @@ public class OssUtils {
String outputBucketName = AliyunConstant.FILE_BUCKET;
String outputBucketName = AliyunConstant.FILE_BUCKET;
request.setSnapshotConfig(generateSnapshotConfig(outputBucketName, outObjectKey, time).toJSONString());
request.setSnapshotConfig(generateSnapshotConfig(outputBucketName, outObjectKey, time).toJSONString());
request.setPipelineId(AliyunConstant.getPipelineId(inputBucketName));
request.setPipelineId(AliyunConstant.getPipelineId(inputBucketName));
SnapshotJob
snapshotJob
=
getAcsClient
(
inputBucketName
).
getAcsResponse
(
request
).
getSnapshotJob
();
SnapshotJob snapshotJob = new SnapshotJob();
getAcsClient(inputBucketName).getAcsResponse(request).getSnapshotJob();
if ("Success".equalsIgnoreCase(snapshotJob.getState())) {
if ("Success".equalsIgnoreCase(snapshotJob.getState())) {
String outObject = URLDecoder.decode(snapshotJob.getSnapshotConfig().getOutputFile().getObject(),
String outObject = URLDecoder.decode(snapshotJob.getSnapshotConfig().getOutputFile().getObject(),
"UTF-8");
"UTF-8");
...
@@ -879,7 +1012,132 @@ public class OssUtils {
...
@@ -879,7 +1012,132 @@ public class OssUtils {
LOGGER.error("【aliOSS】视频截图失败:" + e.getMessage(), e);
LOGGER.error("【aliOSS】视频截图失败:" + e.getMessage(), e);
}
}
return null;
return null;
}*/
/**
* 提交视频截图任务,成功返回图片地址
* @author:zhuyajie
* @date:2020/6/1 20:08
* * @param null
*/
public
static
String
submitSnapshotJob
(
String
fileUrl
,
int
time
){
LOGGER
.
info
(
"【aliOSS】提交MP4截图作业,<START>.[fileUrl]="
+
fileUrl
);
String
fileType
=
FileUtils
.
getFileType
(
fileUrl
);
if
(!
FileUtils
.
VIDEO
.
equals
(
FileUtils
.
getGatherName
(
fileType
)))
{
return
null
;
}
if
(!
StringTools
.
contains
(
fileUrl
,
AliyunConstant
.
OSS_CDN_URLS
))
{
return
null
;
}
}
String
inputBucketName
=
AliyunConstant
.
getBucketName
(
fileUrl
);
MpcClient
mpcClient
=
getAcsClient
(
inputBucketName
);
String
objectKey
=
splitObjectKey
(
fileUrl
);
// 设置创建截图模板的请求参数
CreateThumbnailRequest
createThumbnailRequest
=
new
CreateThumbnailRequest
();
// 设置截图源文件地址
ObsObjInfo
input
=
new
ObsObjInfo
();
//OBS桶名
input
.
setBucket
(
inputBucketName
);
//OBS下媒资路径
input
.
setObject
(
objectKey
);
//OBS桶所在区域
input
.
setLocation
(
AliyunConstant
.
getOssRegion
(
inputBucketName
));
createThumbnailRequest
.
setInput
(
input
);
// 设置截图后文件存放地址
String
outObjectKey
=
getTranscodeOutObjectKey
(
AliyunEnum
.
SNAPSHOT
,
ImageTypeEnum
.
JPG
.
value
);
String
outputBucketName
=
AliyunConstant
.
FILE_BUCKET
;
ObsObjInfo
output
=
new
ObsObjInfo
();
output
.
setBucket
(
outputBucketName
);
output
.
setObject
(
outObjectKey
);
output
.
setLocation
(
AliyunConstant
.
getOssRegion
(
outputBucketName
));
createThumbnailRequest
.
setOutput
(
output
);
// 设置截图参数
CreateThumbnailRequest
.
ThumbnailPara
thumbnailPara
=
new
CreateThumbnailRequest
.
ThumbnailPara
();
//采样类型。支持三种采样方式PERCENT、TIME和DOTS(根据时间间隔time,根据视频时长百分比percent,根据时间截图时的时间点数组dots,目前只支持TIME和DOTS两种方式)
thumbnailPara
.
setType
(
CreateThumbnailRequest
.
ThumbnailPara
.
TypeEnum
.
TIME
);
//从视频文件的第“start_time”开始,持续时间为“duration”,每间隔“time”生成一张截图。
thumbnailPara
.
setTime
(
12
);
thumbnailPara
.
setStartTime
(
time
);
thumbnailPara
.
setDuration
(
3
);
//设置最大长度,范围(380,3840)
thumbnailPara
.
setMaxLength
(
480
);
//设置纵横比(min = 0, max = 1)
thumbnailPara
.
setAspectRatio
(
0
);
//设置截图格式,0表示默认,1表示JPG格式
thumbnailPara
.
setFormat
(
1
);
createThumbnailRequest
.
setThumbnailPara
(
thumbnailPara
);
// 发送创建截图任务请求给媒体处理服务
CreateThumbnailResponse
createThumbnailResponse
=
mpcClient
.
createThumbnailsTask
(
createThumbnailRequest
);
// 返回消息
System
.
out
.
println
(
new
Gson
().
toJson
(
createThumbnailResponse
));
String
taskId
=
null
;
if
(
"SUCCESS"
.
equalsIgnoreCase
(
createThumbnailResponse
.
getRequestStatus
()))
{
taskId
=
createThumbnailResponse
.
getTaskId
();
}
else
{
LOGGER
.
error
(
"【aliOSS】提交视频截图任务失败:"
+
new
Gson
().
toJson
(
createThumbnailResponse
));
return
null
;
}
String
outObject
=
getThumnailObject
(
outputBucketName
,
taskId
);
if
(!
StringUtil
.
isEmpty
(
outObject
))
{
return
getOSSUrl
(
outObject
,
outputBucketName
);
}
else
{
return
null
;
}
}
public
static
String
getThumnailObject
(
String
bucketName
,
String
taskId
){
int
total
=
0
;
while
(
true
)
{
// 如果超过1小时,认定转换失败
if
(
total
>
1
*
60
*
60
)
{
return
null
;
}
String
object
=
OssUtils
.
getThumbnail
(
bucketName
,
taskId
);
if
(
object
!=
null
)
{
return
object
;
}
try
{
Thread
.
sleep
(
3
*
1000
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
"【视频截图】进入休眠状态失败: "
+
e
.
getMessage
(),
e
);
throw
new
FileException
(
FileException
.
FILE_CONVERT_FAIL
,
"获取视频截图失败"
);
}
total
+=
3
;
}
}
private
static
String
getThumbnail
(
String
bucketName
,
String
taskId
)
{
if
(
StringUtil
.
isEmpty
(
taskId
))
{
return
null
;
}
MpcClient
mpcClient
=
getAcsClient
(
bucketName
);
// 设置创建水印模板的请求参数
QueryThumbTaskRequest
queryThumbTaskRequest
=
new
QueryThumbTaskRequest
();
//根据任务ID查询,最多支持10个任务ID
queryThumbTaskRequest
.
setTaskId
(
new
String
[]{
taskId
});
String
outObject
=
null
;
try
{
// 发送查询截图任务请求给媒体处理服务
QueryThumbTaskResponse
queryThumbTaskResponse
=
mpcClient
.
queryThumbnailsTask
(
queryThumbTaskRequest
);
// 返回消息
System
.
out
.
println
(
new
Gson
().
toJson
(
queryThumbTaskResponse
));
if
(
QueryThumbTaskResponse
.
ThumbTask
.
StatusEnum
.
SUCCEEDED
.
equals
(
queryThumbTaskResponse
.
getTaskArray
().
get
(
0
).
getStatus
()))
{
QueryThumbTaskResponse
.
ThumbTask
thumbTask
=
queryThumbTaskResponse
.
getTaskArray
().
get
(
0
);
String
picName
=
thumbTask
.
getThumbnailInfo
().
get
(
0
).
getPicName
();
outObject
=
URLDecoder
.
decode
(
thumbTask
.
getOutput
().
getObject
()+
"/"
+
picName
,
"UTF-8"
);
}
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
"【aliOSS】查询视频截图任务失败:"
+
e
.
getMessage
(),
e
);
}
return
outObject
;
}
/**
/**
* 组装截图参数
* 组装截图参数
...
@@ -889,7 +1147,7 @@ public class OssUtils {
...
@@ -889,7 +1147,7 @@ public class OssUtils {
* @param time
* @param time
* @return
* @return
*/
*/
private
static
JSONObject
generateSnapshotConfig
(
String
bucketName
,
String
outputobject
,
int
time
)
{
/* private static JSONObject generateSnapshotConfig(String bucketName, String outputobject, int time) {
JSONObject snapshotConfig = new JSONObject();
JSONObject snapshotConfig = new JSONObject();
JSONObject output = generateSnapshotInput(bucketName, outputobject);
JSONObject output = generateSnapshotInput(bucketName, outputobject);
snapshotConfig.put("OutputFile", output);
snapshotConfig.put("OutputFile", output);
...
@@ -898,7 +1156,7 @@ public class OssUtils {
...
@@ -898,7 +1156,7 @@ public class OssUtils {
// 截图类型,普通帧:normal,I帧:intra,默认值intra
// 截图类型,普通帧:normal,I帧:intra,默认值intra
snapshotConfig.put("FrameType", "normal");
snapshotConfig.put("FrameType", "normal");
return snapshotConfig;
return snapshotConfig;
}
}
*/
/**
/**
* 组装截图参数
* 组装截图参数
...
@@ -907,16 +1165,16 @@ public class OssUtils {
...
@@ -907,16 +1165,16 @@ public class OssUtils {
* @param inputObject
* @param inputObject
* @return
* @return
*/
*/
private
static
JSONObject
generateSnapshotInput
(
String
bucketName
,
String
inputObject
)
{
/* private static JSONObject generateSnapshotInput(String bucketName, String inputObject) {
JSONObject input = new JSONObject();
JSONObject input = new JSONObject();
input.put("Location", AliyunConstant.OSS_REGION);
input.put("Location", AliyunConstant.OSS_REGION);
input.put("Bucket", bucketName);
input.put("Bucket", bucketName);
input.put("Object", inputObject);
input.put("Object", inputObject);
return input;
return input;
}
}
*/
/**
/**
* 组装转换后的地址(华东地区)
* 组装转换后的地址(华东地区)
new
*
*
* @param transcodeJobId
* @param transcodeJobId
* @return
* @return
...
@@ -927,7 +1185,7 @@ public class OssUtils {
...
@@ -927,7 +1185,7 @@ public class OssUtils {
}
}
/**
/**
* 组装转换后的地址,根据BUCKETNAME
* 组装转换后的地址,根据BUCKETNAME
new
*
*
* @param transcodeJobId
* @param transcodeJobId
* @return
* @return
...
@@ -953,7 +1211,8 @@ public class OssUtils {
...
@@ -953,7 +1211,8 @@ public class OssUtils {
if
(
StringUtil
.
isEmpty
(
transcodeJobId
))
{
if
(
StringUtil
.
isEmpty
(
transcodeJobId
))
{
return
new
UploadResultInfo
(
"ali"
,
"ali转码作业失败[transcodeJobId=null]"
,
false
);
return
new
UploadResultInfo
(
"ali"
,
"ali转码作业失败[transcodeJobId=null]"
,
false
);
}
}
Job
transcodeJob
=
getTranscodeJob
(
transcodeJobId
,
outputBucketName
);
// Job transcodeJob = getTranscodeJob(transcodeJobId, outputBucketName);
QueryTranscodingResponse
.
QueryTranscodingInfo
transcodeJob
=
getTranscodeJob
(
transcodeJobId
,
outputBucketName
);
return
explainTranscodeResult
(
transcodeJob
);
return
explainTranscodeResult
(
transcodeJob
);
}
}
...
@@ -963,7 +1222,7 @@ public class OssUtils {
...
@@ -963,7 +1222,7 @@ public class OssUtils {
* @param transcodeJobId
* @param transcodeJobId
* @return
* @return
*/
*/
private
static
Job
getTranscodeJob
(
String
transcodeJobId
,
String
bucketName
)
throws
FileException
{
/*private static Job getTranscodeJob(String transcodeJobId, String bucketName) throws FileException {
QueryJobListRequest request = new QueryJobListRequest();
QueryJobListRequest request = new QueryJobListRequest();
request.setJobIds(transcodeJobId);
request.setJobIds(transcodeJobId);
QueryJobListResponse response = null;
QueryJobListResponse response = null;
...
@@ -974,22 +1233,64 @@ public class OssUtils {
...
@@ -974,22 +1233,64 @@ public class OssUtils {
LOGGER.error("【aliOSS】获取转换作业情况失败:" + e.getMessage(), e);
LOGGER.error("【aliOSS】获取转换作业情况失败:" + e.getMessage(), e);
throw new FileException(FileException.FILE_CONVERT_FAIL, "获取转换作业情况失败");
throw new FileException(FileException.FILE_CONVERT_FAIL, "获取转换作业情况失败");
}
}
}*/
private
static
QueryTranscodingResponse
.
QueryTranscodingInfo
getTranscodeJob
(
String
transcodeJobId
,
String
bucketName
){
MpcClient
mpcClient
=
OssUtils
.
initAcsClient
(
bucketName
);
//设置查询转码任务ID
QueryTranscodingRequest
queryTranscodingRequest
=
new
QueryTranscodingRequest
();
queryTranscodingRequest
.
setTaskId
(
transcodeJobId
);
try
{
//发送查询转码任务请求
QueryTranscodingResponse
queryTranscodingResponse
=
mpcClient
.
queryTranscodingTask
(
queryTranscodingRequest
);
System
.
out
.
println
(
new
Gson
().
toJson
(
queryTranscodingResponse
));
return
queryTranscodingResponse
.
getTranscodingArray
().
get
(
0
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
"【aliOSS】获取转换作业情况失败:"
+
e
.
getMessage
(),
e
);
throw
new
FileException
(
FileException
.
FILE_CONVERT_FAIL
,
"获取转换作业情况失败"
);
}
}
}
private
static
UploadResultInfo
explainTranscodeResult
(
QueryTranscodingResponse
.
QueryTranscodingInfo
transcodingInfo
){
String
status
=
transcodingInfo
.
getStatus
();
if
(
"FAILED"
.
equals
(
status
))
{
LOGGER
.
warn
(
"【huawei】转换作业失败:[jobId]"
+
transcodingInfo
.
getTaskId
()
+
",[status]="
+
status
);
return
new
UploadResultInfo
(
"ali"
,
"huawei转码作业失败"
,
false
);
}
if
(
"SUCCEEDED"
.
equals
(
status
))
{
QueryTranscodingResponse
.
QueryTranscodingInfo
.
Output
output
=
transcodingInfo
.
getOutput
();
String
bucketName
=
output
.
getBucket
();
String
objectKey
=
null
;
String
outputFileName
=
transcodingInfo
.
getOutputFileNames
().
get
(
0
);
try
{
objectKey
=
URLDecoder
.
decode
(
output
.
getObject
()+
"/"
+
outputFileName
,
"UTF-8"
);
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
"【aliOSS】组装转换后的地址失败:"
+
e
.
getMessage
(),
e
);
return
new
UploadResultInfo
(
"ali"
,
"huawei转码作业失败"
,
false
);
}
// 文件大小
Long
fileSize
=
transcodingInfo
.
getTranscodeDetail
().
getMultitaskInfo
().
get
(
0
).
getOutputFile
().
getSize
();
// 视频时长 音频时长
Integer
duration
=
transcodingInfo
.
getTranscodeDetail
().
getMultitaskInfo
().
get
(
0
).
getOutputFile
().
getDuration
();
return
getResultInfo
(
objectKey
,
fileSize
,
duration
.
toString
(),
bucketName
);
}
return
null
;
}
/**
/**
* 解析转换后的结果
* 解析转换后的结果
*
*
* @param transcodeJob
* @param transcodeJob
* @return
* @return
*/
*/
private
static
UploadResultInfo
explainTranscodeResult
(
Job
transcodeJob
)
{
/* private static UploadResultInfo explainTranscodeResult(Job transcodeJob) {
String status = transcodeJob.getState();
String status = transcodeJob.getState();
if ("TranscodeFail".equals(status)) {
if ("TranscodeFail".equals(status)) {
LOGGER.warn("【aliOSS】转换作业失败:[jobId]" + transcodeJob.getJobId() + ",[status]=" + status);
LOGGER.warn("【aliOSS】转换作业失败:[jobId]" + transcodeJob.getJobId() + ",[status]=" + status);
return new UploadResultInfo("ali", "ali转码作业失败", false);
return new UploadResultInfo("ali", "ali转码作业失败", false);
}
}
if ("TranscodeSuccess".equals(status)) {
if ("TranscodeSuccess".equals(status)) {
com
.
aliyuncs
.
mts
.
model
.
v20140618
.
QueryJobListResponse
.
Job
.
Output
output
=
transcodeJob
.
getOutput
();
Job.Output output = transcodeJob.getOutput();
String bucketName = output.getOutputFile().getBucket();
String bucketName = output.getOutputFile().getBucket();
String objectKey = null;
String objectKey = null;
try {
try {
...
@@ -1016,7 +1317,7 @@ public class OssUtils {
...
@@ -1016,7 +1317,7 @@ public class OssUtils {
return getResultInfo(objectKey, fileSize, duration, bucketName);
return getResultInfo(objectKey, fileSize, duration, bucketName);
}
}
return null;
return null;
}
}
*/
/**
/**
* 获取媒体信息,仅限经过转码的音视频文件
* 获取媒体信息,仅限经过转码的音视频文件
...
@@ -1032,26 +1333,22 @@ public class OssUtils {
...
@@ -1032,26 +1333,22 @@ public class OssUtils {
}
}
String
objectKey
=
splitObjectKey
(
fileUrl
);
String
objectKey
=
splitObjectKey
(
fileUrl
);
String
bucketName
=
AliyunConstant
.
getBucketName
(
fileUrl
);
String
bucketName
=
AliyunConstant
.
getBucketName
(
fileUrl
);
SubmitMediaInfoJobRequest
request
=
new
SubmitMediaInfoJobRequest
();
ObjectMetadata
objectMetadata
=
null
;
OSSFileDO
ossFileDO
=
new
OSSFileDO
(
AliyunConstant
.
getOssRegion
(
bucketName
),
bucketName
,
objectKey
);
request
.
setInput
(
ossFileDO
.
toJsonString
());
SubmitMediaInfoJobResponse
response
=
null
;
try
{
try
{
response
=
getAcsClient
(
bucketName
).
getAcsResponse
(
request
);
objectMetadata
=
getObjectMetadata
(
objectKey
,
bucketName
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
"【aliOSS】获取媒体信息失败:"
+
e
.
getMessage
(),
e
);
LOGGER
.
error
(
"【aliOSS】获取媒体信息失败:"
+
e
.
getMessage
(),
e
);
}
}
if
(
response
==
null
)
{
if
(
objectMetadata
==
null
)
{
return
null
;
return
null
;
}
}
// 封装返回对象
// 封装返回对象
Format
format
=
response
.
getMediaInfoJob
().
getProperties
().
getFormat
();
OssMediaInfoDTO
ossMediaInfoDTO
=
new
OssMediaInfoDTO
();
OssMediaInfoDTO
ossMediaInfoDTO
=
new
OssMediaInfoDTO
();
ossMediaInfoDTO
.
setBucket
(
bucketName
);
ossMediaInfoDTO
.
setBucket
(
bucketName
);
ossMediaInfoDTO
.
setLocation
(
AliyunConstant
.
getOssRegion
(
bucketName
));
ossMediaInfoDTO
.
setLocation
(
AliyunConstant
.
getOssRegion
(
bucketName
));
ossMediaInfoDTO
.
setObejctKey
(
objectKey
);
ossMediaInfoDTO
.
setObejctKey
(
objectKey
);
ossMediaInfoDTO
.
setSize
(
StringUtil
.
isEmpty
(
format
.
getSize
())
?
0L
:
Long
.
parseLong
(
format
.
getSize
()));
ossMediaInfoDTO
.
setSize
(
1L
);
ossMediaInfoDTO
.
setDuration
(
StringUtil
.
isEmpty
(
format
.
getDuration
())
?
BigDecimal
.
ZERO
:
new
BigDecimal
(
format
.
getDuration
()));
ossMediaInfoDTO
.
setDuration
(
new
BigDecimal
(
1
));
LOGGER
.
info
(
"【aliOSS】获取媒体信息,仅限经过转码的音视频文件,<END>.[ossMediaInfoDTO]="
+
ossMediaInfoDTO
);
LOGGER
.
info
(
"【aliOSS】获取媒体信息,仅限经过转码的音视频文件,<END>.[ossMediaInfoDTO]="
+
ossMediaInfoDTO
);
return
ossMediaInfoDTO
;
return
ossMediaInfoDTO
;
}
}
...
@@ -1062,12 +1359,13 @@ public class OssUtils {
...
@@ -1062,12 +1359,13 @@ public class OssUtils {
* @param objectKey
* @param objectKey
* @return
* @return
*/
*/
@SneakyThrows
public
static
ObjectMetadata
getObjectMetadata
(
String
objectKey
,
String
bucketName
)
throws
FileException
{
public
static
ObjectMetadata
getObjectMetadata
(
String
objectKey
,
String
bucketName
)
throws
FileException
{
// 创建OSSClient实例
// 创建OSSClient实例
O
SSClient
ossClient
=
getOSSClient
(
bucketName
);
O
bsClient
ossClient
=
getOSSClient
(
bucketName
);
ObjectMetadata
objectMetadata
=
ossClient
.
getObjectMetadata
(
bucketName
,
objectKey
);
ObjectMetadata
objectMetadata
=
ossClient
.
getObjectMetadata
(
bucketName
,
objectKey
);
// 关闭client
// 关闭client
ossClient
.
shutdown
();
ossClient
.
close
();
return
objectMetadata
;
return
objectMetadata
;
}
}
...
@@ -1082,13 +1380,13 @@ public class OssUtils {
...
@@ -1082,13 +1380,13 @@ public class OssUtils {
String
objectKey
=
splitObjectKey
(
fileUrl
);
String
objectKey
=
splitObjectKey
(
fileUrl
);
String
bucketName
=
AliyunConstant
.
getBucketName
(
fileUrl
);
String
bucketName
=
AliyunConstant
.
getBucketName
(
fileUrl
);
// OSSClient实例
// OSSClient实例
O
SSClient
ossClient
=
null
;
O
bsClient
ossClient
=
null
;
InputStream
is
=
null
;
InputStream
is
=
null
;
ByteArrayOutputStream
os
=
null
;
ByteArrayOutputStream
os
=
null
;
byte
[]
result
=
null
;
byte
[]
result
=
null
;
try
{
try
{
ossClient
=
getOSSClient
(
bucketName
);
ossClient
=
getOSSClient
(
bucketName
);
O
SSObject
ossObject
=
ossClient
.
getObject
(
bucketName
,
objectKey
);
O
bsObject
ossObject
=
ossClient
.
getObject
(
bucketName
,
objectKey
);
is
=
ossObject
.
getObjectContent
();
is
=
ossObject
.
getObjectContent
();
os
=
new
ByteArrayOutputStream
();
os
=
new
ByteArrayOutputStream
();
byte
[]
buff
=
new
byte
[
1024
];
byte
[]
buff
=
new
byte
[
1024
];
...
@@ -1110,7 +1408,7 @@ public class OssUtils {
...
@@ -1110,7 +1408,7 @@ public class OssUtils {
os
.
close
();
os
.
close
();
}
}
if
(
ossClient
!=
null
)
{
if
(
ossClient
!=
null
)
{
ossClient
.
shutdown
();
ossClient
.
close
();
}
}
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
"【aliOSS】下载文件,关闭文件流失败:"
+
e
.
getMessage
(),
e
);
LOGGER
.
error
(
"【aliOSS】下载文件,关闭文件流失败:"
+
e
.
getMessage
(),
e
);
...
@@ -1120,27 +1418,21 @@ public class OssUtils {
...
@@ -1120,27 +1418,21 @@ public class OssUtils {
}
}
/**
/**
* 下载文件到本地
* 下载文件到本地
()
*
*
* @param fileUrl
* @param fileUrl
* @param outFilePath
* @param outFilePath
*/
*/
@SneakyThrows
public
static
void
downloadFile
(
String
fileUrl
,
String
outFilePath
)
throws
FileException
{
public
static
void
downloadFile
(
String
fileUrl
,
String
outFilePath
)
throws
FileException
{
String
objectKey
=
splitObjectKey
(
fileUrl
);
String
objectKey
=
splitObjectKey
(
fileUrl
);
String
bucketName
=
AliyunConstant
.
getBucketName
(
fileUrl
);
String
bucketName
=
AliyunConstant
.
getBucketName
(
fileUrl
);
OSSClient
ossClient
=
null
;
try
{
try
{
// 创建OSSClient实例
downloadPointFile2OSS
(
fileUrl
,
outFilePath
,
bucketName
,
objectKey
);
ossClient
=
getOSSClient
(
bucketName
);
// 下载object到文件
ossClient
.
getObject
(
new
GetObjectRequest
(
bucketName
,
objectKey
),
new
File
(
outFilePath
));
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
"【aliOSS】下载文件失败:"
+
e
.
getMessage
(),
e
);
LOGGER
.
error
(
"【aliOSS】下载文件失败:"
+
e
.
getMessage
(),
e
);
throw
new
FileException
(
FileException
.
FILE_DOWNLOAD_FAILURE
,
"下载文件失败"
);
//下载失败再次尝试断点下载
}
finally
{
downloadPointFile2OSS
(
fileUrl
,
outFilePath
,
bucketName
,
objectKey
);
if
(
ossClient
!=
null
)
{
ossClient
.
shutdown
();
}
}
}
}
}
...
@@ -1164,7 +1456,7 @@ public class OssUtils {
...
@@ -1164,7 +1456,7 @@ public class OssUtils {
uploadResultInfo
.
setSize
(
size
);
uploadResultInfo
.
setSize
(
size
);
}
}
uploadResultInfo
.
setFileName
(
FileUtils
.
getFileName
(
objectKey
));
uploadResultInfo
.
setFileName
(
FileUtils
.
getFileName
(
objectKey
));
uploadResultInfo
.
setFileId
(
"
ali"
);
uploadResultInfo
.
setFileId
(
"
huawei"
);
uploadResultInfo
.
setFlag
(
true
);
uploadResultInfo
.
setFlag
(
true
);
uploadResultInfo
.
setFinish
(
true
);
uploadResultInfo
.
setFinish
(
true
);
if
(!
StringUtil
.
isEmpty
(
duration
))
{
if
(!
StringUtil
.
isEmpty
(
duration
))
{
...
@@ -1245,6 +1537,21 @@ public class OssUtils {
...
@@ -1245,6 +1537,21 @@ public class OssUtils {
return
getObjectKey
(
aliyunEnum
,
fileName
,
fileType
);
return
getObjectKey
(
aliyunEnum
,
fileName
,
fileType
);
}
}
/**
* 组装输出文件Object路径-转码
*
* @param aliyunEnum
* @param fileType
* @return
*/
private
static
String
getTranscodeOutObjectKey
(
AliyunEnum
aliyunEnum
,
String
fileType
)
{
//用于“output”时,只需指定到转码结果期望存放的路径。
String
gatherName
=
FileUtils
.
getGatherName
(
fileType
);
gatherName
=
StringUtil
.
isEmpty
(
gatherName
)
?
"other"
:
gatherName
.
toLowerCase
();
return
new
StringBuilder
(
"oss/"
).
append
(
aliyunEnum
.
value
).
append
(
"/"
).
append
(
gatherName
).
append
(
"/"
)
.
append
(
fileType
).
append
(
"/"
).
toString
();
}
/**
/**
* 组装ObjectKey
* 组装ObjectKey
*
*
...
@@ -1550,6 +1857,7 @@ public class OssUtils {
...
@@ -1550,6 +1857,7 @@ public class OssUtils {
* @return
* @return
* @throws FileException
* @throws FileException
*/
*/
@SneakyThrows
public
static
OssImageCropDTO
imageCropSaveas
(
String
fileUrl
,
int
width
,
int
height
,
int
x
,
int
y
)
public
static
OssImageCropDTO
imageCropSaveas
(
String
fileUrl
,
int
width
,
int
height
,
int
x
,
int
y
)
throws
FileException
{
throws
FileException
{
LOGGER
.
info
(
"【aliOSS】图片裁剪持久化,<START>.[fileUrl]="
+
fileUrl
);
LOGGER
.
info
(
"【aliOSS】图片裁剪持久化,<START>.[fileUrl]="
+
fileUrl
);
...
@@ -1565,24 +1873,28 @@ public class OssUtils {
...
@@ -1565,24 +1873,28 @@ public class OssUtils {
style
.
append
(
",h_"
).
append
(
height
);
style
.
append
(
",h_"
).
append
(
height
);
style
.
append
(
",x_"
).
append
(
x
);
style
.
append
(
",x_"
).
append
(
x
);
style
.
append
(
",y_"
).
append
(
y
);
style
.
append
(
",y_"
).
append
(
y
);
style
.
append
(
"|sys/saveas"
);
String
outObjectKey
=
getOutObjectKey
(
AliyunEnum
.
CUT
,
null
,
fileType
);
style
.
append
(
",o_"
).
append
(
BinaryUtil
.
toBase64String
(
outObjectKey
.
getBytes
()));
style
.
append
(
",b_"
).
append
(
BinaryUtil
.
toBase64String
(
bucketName
.
getBytes
()));
ProcessObjectRequest
request
=
new
ProcessObjectRequest
(
bucketName
,
sourceKey
,
style
.
toString
());
// 创建OSSClient实例
// 创建OSSClient实例
OSSClient
ossClient
=
getOSSClient
(
bucketName
);
ObsClient
ossClient
=
getOSSClient
(
bucketName
);
GenericResult
processResult
=
ossClient
.
processObject
(
request
);
TemporarySignatureRequest
temporarySignatureRequest
=
new
TemporarySignatureRequest
();
OssImageCropDTO
ossImageCropDTO
=
null
;
temporarySignatureRequest
.
setObjectKey
(
sourceKey
);
Map
<
String
,
Object
>
queryParams
=
new
HashMap
<>();
queryParams
.
put
(
"x-image-process"
,
style
.
toString
());
queryParams
.
put
(
"x-image-save-object"
,
ServiceUtils
.
toBase64
(
sourceKey
.
getBytes
(
"UTF-8"
)));
queryParams
.
put
(
"x-image-save-bucket"
,
ServiceUtils
.
toBase64
(
bucketName
.
getBytes
(
"UTF-8"
)));
temporarySignatureRequest
.
setQueryParams
(
queryParams
);
temporarySignatureRequest
.
setBucketName
(
bucketName
);
TemporarySignatureResponse
response
=
ossClient
.
createTemporarySignature
(
temporarySignatureRequest
);
//访问的url
String
url
=
response
.
getSignedUrl
();
LOGGER
.
info
(
url
);
OssImageCropDTO
ossImageCropDTO
=
new
OssImageCropDTO
();
try
{
try
{
String
json
=
IOUtils
.
readStreamAsString
(
processResult
.
getResponse
().
getContent
(),
"UTF-8"
);
ossImageCropDTO
.
setBucket
(
bucketName
);
processResult
.
getResponse
().
getContent
().
close
();
ossImageCropDTO
.
setObject
(
sourceKey
);
ossImageCropDTO
=
JSON
.
parseObject
(
json
,
OssImageCropDTO
.
class
);
ossImageCropDTO
.
setFileUrl
(
url
);
ossImageCropDTO
.
setFileUrl
(
getOSSUrl
(
ossImageCropDTO
.
getObject
(),
bucketName
));
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
LOGGER
.
error
(
"【aliOSS】图片裁剪持久化失败:"
+
e
.
getMessage
(),
e
);
LOGGER
.
error
(
"【aliOSS】图片裁剪持久化失败:"
+
e
.
getMessage
(),
e
);
}
}
LOGGER
.
info
(
"【aliOSS】图片裁剪持久化,<END>.[ossImageCropDTO]="
+
ossImageCropDTO
);
return
ossImageCropDTO
;
return
ossImageCropDTO
;
}
}
...
@@ -1592,28 +1904,50 @@ public class OssUtils {
...
@@ -1592,28 +1904,50 @@ public class OssUtils {
* @param fileUrl
* @param fileUrl
* @param style
* @param style
*/
*/
@SneakyThrows
private
static
String
imageHandle
(
String
fileUrl
,
String
style
)
{
private
static
String
imageHandle
(
String
fileUrl
,
String
style
)
{
String
fileType
=
FileUtils
.
getFileType
(
fileUrl
);
String
fileType
=
FileUtils
.
getFileType
(
fileUrl
);
String
key
=
splitObjectKey
(
fileUrl
);
String
key
=
splitObjectKey
(
fileUrl
);
String
bucketName
=
AliyunConstant
.
getBucketName
(
fileUrl
);
String
bucketName
=
AliyunConstant
.
getBucketName
(
fileUrl
);
GetObjectRequest
request
=
new
GetObjectRequest
(
bucketName
,
key
);
GetObjectRequest
request
=
new
GetObjectRequest
(
bucketName
,
key
);
request
.
set
Process
(
style
);
request
.
set
ImageProcess
(
style
);
// 创建OSSClient实例
// 创建OSSClient实例
O
SSClient
ossClient
=
getOSSClient
(
bucketName
);
O
bsClient
ossClient
=
getOSSClient
(
bucketName
);
// 生成新的图片地址
// 生成新的图片地址
String
localPath
=
FilePathConstant
.
IMAGE
+
UUIDUitl
.
generateString
(
32
)
+
"."
+
fileType
;
String
localPath
=
FilePathConstant
.
IMAGE
+
UUIDUitl
.
generateString
(
32
)
+
"."
+
fileType
;
FileUtils
.
creatFiles
(
localPath
);
FileUtils
.
creatFiles
(
localPath
);
try
{
try
{
ossClient
.
getObject
(
request
,
new
File
(
localPath
));
ObsObject
obsObject
=
ossClient
.
getObject
(
request
);
obsObjectToLocalFile
(
localPath
,
obsObject
);
}
catch
(
Exception
e
)
{
}
catch
(
Exception
e
)
{
FileUtils
.
deleteFile
(
localPath
);
FileUtils
.
deleteFile
(
localPath
);
LOGGER
.
error
(
"【aliOSS】图片处理API:"
+
e
.
getMessage
(),
e
);
LOGGER
.
error
(
"【aliOSS】图片处理API:"
+
e
.
getMessage
(),
e
);
}
finally
{
}
finally
{
ossClient
.
shutdown
();
ossClient
.
close
();
}
}
return
localPath
;
return
localPath
;
}
}
private
static
void
obsObjectToLocalFile
(
String
localPath
,
ObsObject
obsObject
)
throws
IOException
{
InputStream
input
=
null
;
FileOutputStream
downloadFile
=
null
;
try
{
input
=
obsObject
.
getObjectContent
();
int
index
;
byte
[]
bytes
=
new
byte
[
1024
];
downloadFile
=
new
FileOutputStream
(
localPath
);
while
((
index
=
input
.
read
(
bytes
))
!=
-
1
)
{
downloadFile
.
write
(
bytes
,
0
,
index
);
downloadFile
.
flush
();
}
}
catch
(
IOException
e
)
{
LOGGER
.
error
(
"obsObjectToLocalFile失败"
);
}
finally
{
input
.
close
();
downloadFile
.
close
();
}
}
/**
/**
* 图片增加水印
* 图片增加水印
*
*
...
@@ -1628,7 +1962,7 @@ public class OssUtils {
...
@@ -1628,7 +1962,7 @@ public class OssUtils {
ImageUtils
.
checkIsImage
(
fileUrl
);
ImageUtils
.
checkIsImage
(
fileUrl
);
StringBuilder
style
=
new
StringBuilder
(
"image/watermark"
);
StringBuilder
style
=
new
StringBuilder
(
"image/watermark"
);
// 水印文本,需要转换成base64格式
// 水印文本,需要转换成base64格式
style
.
append
(
",text_"
+
new
String
(
Base64
.
encode
Base64
(
watermarkContent
.
getBytes
())));
style
.
append
(
",text_"
+
new
String
(
Base64
.
encode
(
watermarkContent
.
getBytes
())));
// 水印字体大小,位置,偏移量
// 水印字体大小,位置,偏移量
style
.
append
(
",size_60,g_se,x_20,y_20"
);
style
.
append
(
",size_60,g_se,x_20,y_20"
);
// 生成新的图片地址
// 生成新的图片地址
...
@@ -1657,7 +1991,7 @@ public class OssUtils {
...
@@ -1657,7 +1991,7 @@ public class OssUtils {
fileUrl
=
checkImageFileUrl
(
fileUrl
);
fileUrl
=
checkImageFileUrl
(
fileUrl
);
// 水印文本
// 水印文本
StringBuilder
style
=
new
StringBuilder
(
"image/watermark"
);
StringBuilder
style
=
new
StringBuilder
(
"image/watermark"
);
style
.
append
(
",text_"
+
new
String
(
Base64
.
encode
Base64URLSafe
(
text
.
getBytes
())));
style
.
append
(
",text_"
+
new
String
(
Base64
.
encode
(
text
.
getBytes
())));
// 水印字体大小,如果小于1,自动计算文字大小2
// 水印字体大小,如果小于1,自动计算文字大小2
int
size
=
ossImageDTO
.
getSize
();
int
size
=
ossImageDTO
.
getSize
();
style
.
append
(
",size_"
).
append
(
size
<
1
?
caleImageFontSize
(
fileUrl
)
:
size
);
style
.
append
(
",size_"
).
append
(
size
<
1
?
caleImageFontSize
(
fileUrl
)
:
size
);
...
@@ -1696,10 +2030,10 @@ public class OssUtils {
...
@@ -1696,10 +2030,10 @@ public class OssUtils {
}
}
StringBuilder
style
=
new
StringBuilder
(
"image/watermark"
);
StringBuilder
style
=
new
StringBuilder
(
"image/watermark"
);
// 水印图片地址,按主图大小的10%缩放
// 水印图片地址,按主图大小的10%缩放
watermarkImageUrl
=
splitObjectKey
(
watermarkImageUrl
)
+
"?x-oss-process=image/resize,P_10"
;
watermarkImageUrl
=
AliyunConstant
.
getBucketName
(
watermarkImageUrl
)+
"/"
+
splitObjectKey
(
watermarkImageUrl
);
style
.
append
(
",image_"
+
new
String
(
Base64
.
encode
Base64URLSafe
(
watermarkImageUrl
.
getBytes
())));
style
.
append
(
",image_"
+
new
String
(
Base64
.
encode
(
watermarkImageUrl
.
getBytes
())));
// 水印颜色,位置,偏移量
// 水印颜色,位置,偏移量
style
.
append
(
",g_
nw,x_20,y_10"
);
style
.
append
(
",g_
br,t_90,x_10,y_10"
);
String
result
=
imageWatermarkHandle
(
fileUrl
,
style
.
toString
());
String
result
=
imageWatermarkHandle
(
fileUrl
,
style
.
toString
());
LOGGER
.
info
(
"【aliOSS】图片增加水印(图片),<END>.[result]="
+
result
);
LOGGER
.
info
(
"【aliOSS】图片增加水印(图片),<END>.[result]="
+
result
);
return
result
;
return
result
;
...
@@ -1711,21 +2045,23 @@ public class OssUtils {
...
@@ -1711,21 +2045,23 @@ public class OssUtils {
* @param fileUrl
* @param fileUrl
* @param style
* @param style
*/
*/
@SneakyThrows
private
static
String
imageWatermarkHandle
(
String
fileUrl
,
String
style
)
{
private
static
String
imageWatermarkHandle
(
String
fileUrl
,
String
style
)
{
String
fileName
=
FileUtils
.
getFileName
(
fileUrl
);
String
fileName
=
FileUtils
.
getFileName
(
fileUrl
);
String
fileType
=
FileUtils
.
getFileType
(
fileUrl
);
String
fileType
=
FileUtils
.
getFileType
(
fileUrl
);
String
key
=
splitObjectKey
(
fileUrl
);
String
key
=
splitObjectKey
(
fileUrl
);
String
bucketName
=
AliyunConstant
.
getBucketName
(
fileUrl
);
String
bucketName
=
AliyunConstant
.
getBucketName
(
fileUrl
);
GetObjectRequest
request
=
new
GetObjectRequest
(
bucketName
,
key
);
GetObjectRequest
request
=
new
GetObjectRequest
(
bucketName
,
key
);
request
.
set
Process
(
style
.
toString
());
request
.
set
ImageProcess
(
style
);
// 创建OSSClient实例
// 创建OSSClient实例
O
SSClient
ossClient
=
getOSSClient
(
bucketName
);
O
bsClient
ossClient
=
getOSSClient
(
bucketName
);
// 生成带水印的本地图片地址
// 生成带水印的本地图片地址
String
localPath
=
FilePathConstant
.
IMAGE_WATERMARK
+
fileName
+
"_"
+
LocalDateUtils
.
getYmdhmss
()
+
"."
String
localPath
=
FilePathConstant
.
IMAGE_WATERMARK
+
fileName
+
"_"
+
LocalDateUtils
.
getYmdhmss
()
+
"."
+
fileType
;
+
fileType
;
FileUtils
.
creatFiles
(
localPath
);
FileUtils
.
creatFiles
(
localPath
);
ossClient
.
getObject
(
request
,
new
File
(
localPath
));
ObsObject
obsObject
=
ossClient
.
getObject
(
request
);
ossClient
.
shutdown
();
obsObjectToLocalFile
(
localPath
,
obsObject
);
ossClient
.
close
();
// 上传处理后的图片,并删除本地文件
// 上传处理后的图片,并删除本地文件
UploadResultInfo
uploadResultInfo
=
uploadLocalFile4CustomName
(
localPath
,
fileName
);
UploadResultInfo
uploadResultInfo
=
uploadLocalFile4CustomName
(
localPath
,
fileName
);
FileUtils
.
deleteFile
(
localPath
);
FileUtils
.
deleteFile
(
localPath
);
...
@@ -1776,9 +2112,9 @@ public class OssUtils {
...
@@ -1776,9 +2112,9 @@ public class OssUtils {
*
*
* @return
* @return
*/
*/
private
static
O
SSClient
getOSSClient
(
String
bucketName
)
{
private
static
O
bsClient
getOSSClient
(
String
bucketName
)
{
return
new
O
SSClient
(
AliyunConstant
.
getOSSEndPoint
(
bucketName
),
AliyunConstant
.
MAIN_ACCESS_KEY_ID
,
return
new
O
bsClient
(
AliyunConstant
.
MAIN_ACCESS_KEY_ID
,
AliyunConstant
.
MAIN_ACCESS_KEY_SECRET
);
AliyunConstant
.
MAIN_ACCESS_KEY_SECRET
,
AliyunConstant
.
getOSSEndPoint
(
bucketName
));
}
}
/**
/**
...
@@ -1788,11 +2124,12 @@ public class OssUtils {
...
@@ -1788,11 +2124,12 @@ public class OssUtils {
* @param objectKey
* @param objectKey
* @return
* @return
*/
*/
@SneakyThrows
private
static
boolean
objectExist
(
String
bucketName
,
String
objectKey
)
{
private
static
boolean
objectExist
(
String
bucketName
,
String
objectKey
)
{
O
SSClient
ossClient
=
getOSSClient
(
bucketName
);
O
bsClient
ossClient
=
getOSSClient
(
bucketName
);
boolean
found
=
ossClient
.
doesObjectExist
(
bucketName
,
objectKey
);
boolean
found
=
ossClient
.
doesObjectExist
(
bucketName
,
objectKey
);
// 关闭client
// 关闭client
ossClient
.
shutdown
();
ossClient
.
close
();
return
found
;
return
found
;
}
}
...
...
pcloud-common/src/main/java/com/pcloud/common/utils/aliyun/test/MPCTest.java
0 → 100644
View file @
0e78c657
package
com
.
pcloud
.
common
.
utils
.
aliyun
.
test
;
import
static
feign
.
Util
.
toByteArray
;
import
com.google.gson.Gson
;
import
com.huawei.mpc.client.MpcClient
;
import
com.huawei.mpc.client.MpcConfig
;
import
com.huawei.mpc.model.ObsObjInfo
;
import
com.huawei.mpc.model.thumbnail.CreateThumbnailRequest
;
import
com.huawei.mpc.model.thumbnail.CreateThumbnailResponse
;
import
com.huawei.mpc.model.thumbnail.QueryThumbTaskRequest
;
import
com.huawei.mpc.model.thumbnail.QueryThumbTaskResponse
;
import
com.huawei.mpc.model.transcoding.CreateTranscodingRequest
;
import
com.huawei.mpc.model.transcoding.CreateTranscodingResponse
;
import
com.huawei.mpc.model.transcoding.QueryTranscodingRequest
;
import
com.huawei.mpc.model.transcoding.QueryTranscodingResponse
;
import
com.huawei.mpc.model.transcoding.TextWatermark
;
import
com.pcloud.common.dto.ResponseDto
;
import
com.pcloud.common.exceptions.FileException
;
import
com.pcloud.common.utils.aliyun.OssUtils
;
import
java.io.FileInputStream
;
import
java.io.FileNotFoundException
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.util.ArrayList
;
import
java.util.List
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.web.bind.annotation.GetMapping
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RequestParam
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* @ClassName com.pcloud.auditcenter.utils.test.MPCTest
* @Author zhuyajie
* @Description 转码
* @Date 2020/5/25 17:34
* @Version 1.0
**/
@Slf4j
@RestController
@RequestMapping
(
"mpcTest"
)
public
class
MPCTest
{
public
static
final
String
AK
=
"8J56JHJN5P8OLR5ERKFU"
;
public
static
final
String
SK
=
"xAlBYlowAhwa9c1Wi4JsX7XkZGFlzlWW3CBHdZWJ"
;
public
static
final
String
PROJECT_ID
=
"07455135488025b22fe7c01fdb631c14"
;
private
static
MpcClient
initMpcClient
(){
MpcConfig
mpcConfig
=
new
MpcConfig
();
mpcConfig
.
setEndPoint
(
"mpc.cn-east-2.myhuaweicloud.com"
);
// 设置转码节点地址
mpcConfig
.
setProjectId
(
PROJECT_ID
);
// 设置用户项目编号ProjectId
mpcConfig
.
setSk
(
SK
);
// 设置sk
mpcConfig
.
setAk
(
AK
);
// 设置ak
MpcClient
mpcClient
=
new
MpcClient
(
mpcConfig
);
return
mpcClient
;
}
@RequestMapping
(
value
=
"transcodeJob"
,
method
=
RequestMethod
.
GET
)
public
void
transcodeJob
(
@RequestParam
(
"fileUrl"
)
String
fileUrl
,
@RequestParam
(
"outPutUrl"
)
String
outPutUrl
,
@RequestParam
(
"ext"
)
String
ext
)
throws
FileException
{
// String fileUrl = "oss/transcode/audio/mp3/test_20200529145343507.mp3";
// String outPutUrl = "oss/transcode/audio/mp3/";
// url=oss/transcode/video/mp4/7599ec23e9f8454f8897c4ca64a2df34.mp4
Long
templateId
=
null
;
if
(
"mp3"
.
equals
(
ext
)){
templateId
=
104257L
;
}
else
{
templateId
=
104256L
;
}
transcodeJob
(
"whlg-oss-test-001"
,
fileUrl
,
templateId
,
"cn-east-2"
,
outPutUrl
);
}
// public static void main(String[] args) {
// String fileUrl = "oss/transcode/video/mp4/7599ec23e9f8454f8897c4ca64a2df34.mp4";
// String outPutUrl = "oss/transcode/video/mp4/";
// transcodeJob("whlg-oss-test-002",fileUrl,104256L,"cn-east-2",outPutUrl);
//// getTranscodeJob("460368","test");
// }
private
static
void
transcodeJob
(
String
bucketName
,
String
fileUrl
,
Long
templateId
,
String
location
,
String
outputUrl
){
// 媒体处理服务构造方法
MpcClient
mpcClient
=
initMpcClient
();
//设置媒体处理服务请求参数
CreateTranscodingRequest
createTranscodingRequest
=
new
CreateTranscodingRequest
();
//设置转码的输入文件路径参数,可通过华为云OBS对象存储服务控制台查看。
ObsObjInfo
input
=
new
ObsObjInfo
();
//设置输入桶名
input
.
setBucket
(
bucketName
);
//设置源文件路径
input
.
setObject
(
fileUrl
);
//设置输入桶所在区域
input
.
setLocation
(
location
);
createTranscodingRequest
.
setInput
(
input
);
// 设置转码的输出文件路径参数,可通过华为云OBS对象存储服务控制台查看。
ObsObjInfo
output
=
new
ObsObjInfo
();
//设置输出桶名
output
.
setBucket
(
bucketName
);
//设置输出文件路径
output
.
setObject
(
outputUrl
);
//设置输出桶所在区域
output
.
setLocation
(
location
);
createTranscodingRequest
.
setOutput
(
output
);
//设置转码模板ID
List
<
Long
>
transTempIds
=
new
ArrayList
<
Long
>();
transTempIds
.
add
(
templateId
);
createTranscodingRequest
.
setTransTemplateId
(
transTempIds
);
// 设置水印功能
CreateTranscodingRequest
.
Watermark
watermark
=
new
CreateTranscodingRequest
.
Watermark
();
// watermark.setTemplateId("watermark_template_id");
// 设置水印图片地址
// ObsObjInfo watermarkInput = new ObsObjInfo();
// // 水印图片地址所在桶
// watermarkInput.setBucket(bucketName);
// // 水印图片地址所在路径
// watermarkInput.setObject("objectKey");
// // 水印图片地址所在区域
// watermarkInput.setLocation(location);
// watermark.setInput(watermarkInput);
// 文字水印内容,内容需做Base64编码,
// 示例:若想添加文字水印“测试文字水印”,那么Content的值为:5rWL6K+V5paH5a2X5rC05Y2w
watermark
.
setTextContext
(
"5rWL6K+V5paH5a2X5rC05Y2w"
);
TextWatermark
textWatermark
=
new
TextWatermark
();
// 字体颜色。
// 目前颜色支持black,blue,white,green,red,yellow,brown,gold,pink,orange,purple。
// 默认颜色是white
textWatermark
.
setFontColor
(
"black"
);
// 字体,当前支持fzyouh、msyh
// 默认字体是msyh
textWatermark
.
setFontName
(
"fzyouh"
);
// 字体大小。默认值:16,范围:(4, 120)
textWatermark
.
setFontSize
(
16
);
watermark
.
setTextWatermark
(
textWatermark
);
List
<
CreateTranscodingRequest
.
Watermark
>
watermarks
=
new
ArrayList
<
CreateTranscodingRequest
.
Watermark
>();
watermarks
.
add
(
watermark
);
CreateTranscodingRequest
.
Watermark
[]
watermarkArray
=
new
CreateTranscodingRequest
.
Watermark
[
watermarks
.
size
()];
createTranscodingRequest
.
setWatermarks
(
watermarks
.
toArray
(
watermarkArray
));
//发送媒体处理服务请求
CreateTranscodingResponse
createTranscodingResponse
=
mpcClient
.
createTranscodingTask
(
createTranscodingRequest
);
//返回消息
log
.
info
(
new
Gson
().
toJson
(
createTranscodingResponse
));
}
private
static
QueryTranscodingResponse
getTranscodeJob
(
String
taskId
,
String
bucketName
)
throws
FileException
{
MpcClient
mpcClient
=
initMpcClient
();
//设置查询转码任务ID
QueryTranscodingRequest
queryTranscodingRequest
=
new
QueryTranscodingRequest
();
queryTranscodingRequest
.
setTaskId
(
taskId
);
//发送查询转码任务请求
QueryTranscodingResponse
queryTranscodingResponse
=
mpcClient
.
queryTranscodingTask
(
queryTranscodingRequest
);
System
.
out
.
println
(
new
Gson
().
toJson
(
queryTranscodingResponse
));
return
queryTranscodingResponse
;
}
@GetMapping
(
"getTranscodeJob"
)
public
ResponseDto
<?>
getTranscodeJob
(
@RequestParam
(
"taskId"
)
String
taskId
){
QueryTranscodingResponse
response
=
getTranscodeJob
(
taskId
,
"test"
);
return
new
ResponseDto
<>(
response
);
}
@GetMapping
(
"submitTranscodeJobMp3"
)
public
ResponseDto
<?>
submitTranscodeJobMp3
(){
String
filePath
=
"E:\\KuGou\\Delacey - Dream It Possible.mp3"
;
String
fileName
=
"test"
;
String
str
=
OssUtils
.
submitTranscodeJobMp3
(
fileName
,
filePath
);
return
new
ResponseDto
<>(
str
);
}
@GetMapping
(
"submitTranscodeJobMp302"
)
public
ResponseDto
<?>
submitTranscodeJobMp302
()
throws
IOException
{
String
filePath
=
"E:\\KuGou\\Delacey - Dream It Possible.mp3"
;
InputStream
in
=
new
FileInputStream
(
filePath
);
byte
[]
data
=
toByteArray
(
in
);
return
new
ResponseDto
<>(
OssUtils
.
submitTranscodeJobMp3
(
data
,
"test"
,
"mp3"
));
}
@GetMapping
(
"submitTranscodeJobMp303"
)
public
ResponseDto
<?>
submitTranscodeJobMp303
()
throws
FileNotFoundException
{
String
filePath
=
"E:\\KuGou\\Delacey - Dream It Possible.mp3"
;
InputStream
in
=
new
FileInputStream
(
filePath
);
return
new
ResponseDto
<>(
OssUtils
.
submitTranscodeJobMp3
(
in
,
"test"
,
"mp3"
));
}
@GetMapping
(
"submitTranscodeJobMp4"
)
public
ResponseDto
<?>
submitTranscodeJobMp4
(){
String
filePath
=
"C:\\Users\\HP\\Desktop\\temp\\test.mp4"
;
String
fileName
=
"test"
;
String
str
=
OssUtils
.
submitTranscodeJobMp4
(
fileName
,
filePath
);
return
new
ResponseDto
<>(
str
);
}
@GetMapping
(
"submitTranscodeJobMp402"
)
public
ResponseDto
<?>
submitTranscodeJobMp402
()
throws
IOException
{
String
filePath
=
"C:\\Users\\HP\\Desktop\\temp\\test.mp4"
;
InputStream
in
=
new
FileInputStream
(
filePath
);
byte
[]
data
=
toByteArray
(
in
);
return
new
ResponseDto
<>(
OssUtils
.
submitTranscodeJobMp4
(
data
,
"test"
,
"mp4"
));
}
@GetMapping
(
"getOSSResult"
)
public
ResponseDto
<?>
getOSSResult
(
@RequestParam
(
"transcodeJobId"
)
String
transcodeJobId
){
return
new
ResponseDto
<>(
OssUtils
.
getOSSResult
(
transcodeJobId
));
}
@GetMapping
(
"getOSSResultByRegion"
)
public
ResponseDto
<?>
getOSSResultByRegion
(
@RequestParam
(
"transcodeJobId"
)
String
transcodeJobId
,
@RequestParam
(
"buckectName"
)
String
buckectName
){
return
new
ResponseDto
<>(
OssUtils
.
getOSSResultByRegion
(
transcodeJobId
,
buckectName
));
}
@GetMapping
(
"submitTranscodeJobSync"
)
public
ResponseDto
<?>
submitTranscodeJobSync
(
@RequestParam
(
"fileUrl"
)
String
fileUrl
){
return
new
ResponseDto
(
OssUtils
.
submitTranscodeJobSync
(
fileUrl
));
}
@GetMapping
(
"submitThumbnailRequest"
)
public
ResponseDto
<?>
submitThumbnailRequest
(
@RequestParam
(
"fileUrl"
)
String
fileUrl
){
return
new
ResponseDto
<>(
OssUtils
.
submitSnapshotJob
(
fileUrl
,
10
));
}
private
static
void
createThumbnail
(){
MpcClient
mpcClient
=
initMpcClient
();
// 设置创建截图模板的请求参数
CreateThumbnailRequest
createThumbnailRequest
=
new
CreateThumbnailRequest
();
// 设置截图源文件地址
ObsObjInfo
input
=
new
ObsObjInfo
();
//OBS桶名
input
.
setBucket
(
"whlg-oss-test-002"
);
//OBS下媒资路径
input
.
setObject
(
"oss/transcode/video/mp4/test_20200529160425176.mp4"
);
//OBS桶所在区域
input
.
setLocation
(
"cn-east-2"
);
createThumbnailRequest
.
setInput
(
input
);
// 设置截图后文件存放地址
ObsObjInfo
output
=
new
ObsObjInfo
();
output
.
setBucket
(
"whlg-oss-test-002"
);
output
.
setObject
(
"oss/transcode/video/mp4/"
);
output
.
setLocation
(
"cn-east-2"
);
createThumbnailRequest
.
setOutput
(
output
);
// 设置截图参数
CreateThumbnailRequest
.
ThumbnailPara
thumbnailPara
=
new
CreateThumbnailRequest
.
ThumbnailPara
();
//采样类型。支持三种采样方式PERCENT、TIME和DOTS(根据时间间隔time,根据视频时长百分比percent,根据时间截图时的时间点数组dots,目前只支持TIME和DOTS两种方式)
thumbnailPara
.
setType
(
CreateThumbnailRequest
.
ThumbnailPara
.
TypeEnum
.
TIME
);
thumbnailPara
.
setTime
(
12
);
thumbnailPara
.
setStartTime
(
3
);
thumbnailPara
.
setDuration
(
3
);
//设置最大长度,范围(380,3840)
thumbnailPara
.
setMaxLength
(
480
);
//设置纵横比(min = 0, max = 1)
thumbnailPara
.
setAspectRatio
(
0
);
//设置截图格式,0表示默认,1表示JPG格式
thumbnailPara
.
setFormat
(
1
);
createThumbnailRequest
.
setThumbnailPara
(
thumbnailPara
);
// 发送创建截图任务请求给媒体处理服务
CreateThumbnailResponse
createThumbnailResponse
=
mpcClient
.
createThumbnailsTask
(
createThumbnailRequest
);
// 返回消息
System
.
out
.
println
(
new
Gson
().
toJson
(
createThumbnailResponse
));
}
private
static
void
getThumbnail
(
String
taskId
){
MpcClient
mpcClient
=
initMpcClient
();
// 设置创建水印模板的请求参数
QueryThumbTaskRequest
queryThumbTaskRequest
=
new
QueryThumbTaskRequest
();
//根据任务ID查询,最多支持10个任务ID
queryThumbTaskRequest
.
setTaskId
(
new
String
[]{
taskId
});
// 发送查询截图任务请求给媒体处理服务
QueryThumbTaskResponse
queryThumbTaskResponse
=
mpcClient
.
queryThumbnailsTask
(
queryThumbTaskRequest
);
// 返回消息
System
.
out
.
println
(
new
Gson
().
toJson
(
queryThumbTaskResponse
));
}
}
pcloud-common/src/main/java/com/pcloud/common/utils/aliyun/test/ObsTest.java
0 → 100644
View file @
0e78c657
package
com
.
pcloud
.
common
.
utils
.
aliyun
.
test
;
import
com.obs.services.model.ObjectMetadata
;
import
com.pcloud.common.dto.OssMediaInfoDTO
;
import
com.pcloud.common.entity.UploadResultInfo
;
import
com.pcloud.common.exceptions.FileException
;
import
com.pcloud.common.utils.aliyun.OssUtils
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RequestMethod
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* @ClassName com.pcloud.auditcenter.hw.utils.test.ObsTest
* @Author 吴博
* @Description 华为云测试类
* @Date 2020/5/24 9:27
* @Version 1.0
**/
@RestController
@RequestMapping
(
"obsTest"
)
@Slf4j
public
class
ObsTest
{
private
static
final
String
textFilePath
=
"C:\\Users\\Administrator\\Desktop\\sql.txt"
;
private
static
final
String
audioFilePath
=
"C:\\Users\\Administrator\\Desktop\\123321.mp3"
;
private
static
final
String
imageFilePath
=
"C:\\Users\\Administrator\\Desktop\\girl.jpg"
;
private
static
final
String
imageFileUrl
=
"https://oss.raysgo.com/oss/upload/image/jpg/add52c60c88a4989bdf6bdb554b5f928.jpg"
;
private
static
final
String
videoFilePath
=
"C:\\Users\\Administrator\\Desktop\\e610844f3210d9e249fc8ee0cc6b9a1b_20190815173921219.mp4"
;
private
static
final
String
parentFileUrl
=
"https://oss.raysgo.com/oss/upload/video/mp4/b2f2df50279d43b4af52ebb760924e08"
;
private
static
final
String
videoUrl
=
"https://oss.raysgo.com/oss/upload/video/mp4/e297ea15516146acabbbcb8c31fe0f92.mp4"
;
private
static
final
String
ObjectKey
=
"oss/upload/video/mp4/b2f2df50279d43b4af52ebb760924e08.mp4"
;
private
static
final
String
textUrl
=
"https://oss.raysgo.com/oss/upload/text/txt/4b19722b10604da282497b80c77860fe.txt"
;
private
static
final
String
outFilePath4Mp3
=
"C:\\Users\\Administrator\\Desktop\\localaudio.mp3"
;
private
static
final
String
outFilePath4Mp4
=
"C:\\Users\\Administrator\\Desktop\\localVideo.mp4"
;
private
static
final
String
huaweiImage
=
"C:\\Users\\Administrator\\Desktop\\1588081459(1).png"
;
private
static
final
String
huaweiImageUrl
=
"https://oss.raysgo.com/oss/upload/image/png/7348e76b4a654fdbbccf3a2adbe0d028.png"
;
@RequestMapping
(
value
=
"uploadFileByte"
,
method
=
RequestMethod
.
GET
)
public
UploadResultInfo
uploadFileByte
()
throws
FileException
{
String
content
=
"Hello OBS"
;
byte
[]
buff
=
content
.
getBytes
();
String
fileName
=
""
;
String
fileType
=
"txt"
;
UploadResultInfo
uploadResultInfo
=
OssUtils
.
uploadFileByte
(
buff
,
fileName
,
fileType
);
log
.
info
(
uploadResultInfo
.
toString
());
return
uploadResultInfo
;
}
@RequestMapping
(
value
=
"uploadLocalFile"
,
method
=
RequestMethod
.
GET
)
public
UploadResultInfo
uploadLocalFile
()
throws
FileException
{
String
content
=
"Hello OBS"
;
byte
[]
buff
=
content
.
getBytes
();
String
fileName
=
""
;
String
fileType
=
"txt"
;
UploadResultInfo
uploadResultInfo
=
OssUtils
.
uploadLocalFile
(
videoFilePath
,
null
);
log
.
info
(
uploadResultInfo
.
toString
());
return
uploadResultInfo
;
}
@RequestMapping
(
value
=
"uploadLocalFile4Child"
,
method
=
RequestMethod
.
GET
)
public
UploadResultInfo
uploadLocalFile4Child
()
throws
FileException
{
String
content
=
"Hello OBS"
;
byte
[]
buff
=
content
.
getBytes
();
String
fileName
=
""
;
String
fileType
=
"txt"
;
UploadResultInfo
uploadResultInfo
=
OssUtils
.
uploadLocalFile4Child
(
audioFilePath
,
parentFileUrl
);
log
.
info
(
uploadResultInfo
.
toString
());
return
uploadResultInfo
;
}
@RequestMapping
(
value
=
"getMediaInfo"
,
method
=
RequestMethod
.
GET
)
public
OssMediaInfoDTO
getMediaInfo
()
throws
FileException
{
String
content
=
"Hello OBS"
;
byte
[]
buff
=
content
.
getBytes
();
String
fileName
=
""
;
String
fileType
=
"txt"
;
OssMediaInfoDTO
ossMediaInfoDTO
=
OssUtils
.
getMediaInfo
(
videoUrl
);
log
.
info
(
ossMediaInfoDTO
.
toString
());
return
ossMediaInfoDTO
;
}
@RequestMapping
(
value
=
"getObjectMetadata"
,
method
=
RequestMethod
.
GET
)
public
ObjectMetadata
getObjectMetadata
()
throws
FileException
{
String
content
=
"Hello OBS"
;
byte
[]
buff
=
content
.
getBytes
();
String
fileName
=
""
;
String
fileType
=
"txt"
;
ObjectMetadata
objectMetadata
=
OssUtils
.
getObjectMetadata
(
ObjectKey
,
"whlg-oss-test-002"
);
log
.
info
(
objectMetadata
.
toString
());
return
objectMetadata
;
}
@RequestMapping
(
value
=
"downloadFile2Byte"
,
method
=
RequestMethod
.
GET
)
public
String
downloadFile2Byte
()
throws
FileException
{
String
content
=
"Hello OBS"
;
byte
[]
buff
=
content
.
getBytes
();
String
fileName
=
""
;
String
fileType
=
"txt"
;
byte
[]
bytes
=
OssUtils
.
downloadFile2Byte
(
textUrl
);
log
.
info
(
new
String
(
bytes
));
return
new
String
(
bytes
);
}
@RequestMapping
(
value
=
"downloadFile"
,
method
=
RequestMethod
.
GET
)
public
void
downloadFile
()
throws
FileException
{
String
content
=
"Hello OBS"
;
byte
[]
buff
=
content
.
getBytes
();
String
fileName
=
""
;
String
fileType
=
"txt"
;
OssUtils
.
downloadFile
(
videoUrl
,
outFilePath4Mp4
);
}
@RequestMapping
(
value
=
"imageWidthResize"
,
method
=
RequestMethod
.
GET
)
public
void
imageWidthResize
()
throws
FileException
{
String
content
=
"Hello OBS"
;
byte
[]
buff
=
content
.
getBytes
();
String
fileName
=
""
;
String
fileType
=
"txt"
;
OssUtils
.
imageWidthResize
(
imageFileUrl
,
100
);
}
@RequestMapping
(
value
=
"imageResize"
,
method
=
RequestMethod
.
GET
)
public
void
imageResize
()
throws
FileException
{
String
content
=
"Hello OBS"
;
byte
[]
buff
=
content
.
getBytes
();
String
fileName
=
""
;
String
fileType
=
"txt"
;
OssUtils
.
imageResize
(
imageFileUrl
,
50
);
}
@RequestMapping
(
value
=
"imageAutoOrient"
,
method
=
RequestMethod
.
GET
)
public
void
imageAutoOrient
()
throws
FileException
{
String
content
=
"Hello OBS"
;
byte
[]
buff
=
content
.
getBytes
();
String
fileName
=
""
;
String
fileType
=
"txt"
;
OssUtils
.
imageAutoOrient
(
imageFileUrl
,
50
);
}
@RequestMapping
(
value
=
"imageCrop"
,
method
=
RequestMethod
.
GET
)
public
void
imageCrop
()
throws
FileException
{
String
content
=
"Hello OBS"
;
byte
[]
buff
=
content
.
getBytes
();
String
fileName
=
""
;
String
fileType
=
"txt"
;
OssUtils
.
imageCrop
(
imageFileUrl
,
500
,
500
,
0
,
0
);
}
@RequestMapping
(
value
=
"imageCropSaveas"
,
method
=
RequestMethod
.
GET
)
public
void
imageCropSaveas
()
throws
FileException
{
OssUtils
.
imageCropSaveas
(
imageFileUrl
,
500
,
500
,
0
,
0
);
}
@RequestMapping
(
value
=
"imageWatermark"
,
method
=
RequestMethod
.
GET
)
public
void
imageWatermark
()
throws
FileException
{
String
waterMark
=
OssUtils
.
imageWatermark
(
imageFileUrl
,
"哈哈哈哈,大笨蛋"
);
log
.
info
(
waterMark
);
}
@RequestMapping
(
value
=
"imageWatermark4Image"
,
method
=
RequestMethod
.
GET
)
public
void
imageWatermark4Image
()
throws
FileException
{
String
waterMark
=
OssUtils
.
imageWatermark4Image
(
imageFileUrl
,
huaweiImageUrl
);
log
.
info
(
waterMark
);
}
}
\ No newline at end of file
pom.xml
View file @
0e78c657
...
@@ -106,6 +106,7 @@
...
@@ -106,6 +106,7 @@
<!-- frameworks -->
<!-- frameworks -->
<slf4j.version>
1.7.18
</slf4j.version>
<slf4j.version>
1.7.18
</slf4j.version>
<mpc-sdk-version>
2.0.7
</mpc-sdk-version>
</properties>
</properties>
<dependencies>
<dependencies>
...
@@ -306,6 +307,11 @@
...
@@ -306,6 +307,11 @@
<version>
2.7.0
</version>
<version>
2.7.0
</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>
com.huaweicloud
</groupId>
<artifactId>
esdk-obs-java
</artifactId>
<version>
3.19.7
</version>
</dependency>
<dependency>
<groupId>
com.aliyun
</groupId>
<groupId>
com.aliyun
</groupId>
<artifactId>
aliyun-java-sdk-mts
</artifactId>
<artifactId>
aliyun-java-sdk-mts
</artifactId>
<version>
2.1.7
</version>
<version>
2.1.7
</version>
...
@@ -319,6 +325,29 @@
...
@@ -319,6 +325,29 @@
<version>
1.9.13
</version>
<version>
1.9.13
</version>
</dependency>
</dependency>
<!-- Jackson End -->
<!-- Jackson End -->
<dependency>
<groupId>
com.huawei.mpc
</groupId>
<artifactId>
cloud-java-sdk-mpc
</artifactId>
<version>
${mpc-sdk-version}
</version>
<exclusions>
<exclusion>
<groupId>
com.squareup.retrofit2
</groupId>
<artifactId>
retrofit
</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>
com.squareup.retrofit2
</groupId>
<artifactId>
retrofit
</artifactId>
<version>
2.5.0
</version>
<!--<exclusions>
<exclusion>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</exclusion>
</exclusions>-->
</dependency>
</dependencies>
</dependencies>
</dependencyManagement>
</dependencyManagement>
...
...
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