Skip to content

Commit 2d32066

Browse files
author
吴炳亨
authored
Merge pull request #271 from NigelWu95/dev
Dev
2 parents dfa1b21 + e4dfa41 commit 2d32066

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+1907
-1233
lines changed

docs/datasource.md

+6-5
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,12 @@ indexes=key,etag,fsize
5555
行中不包含 mime 字段,则可以设置 `indexes=0,1,2,3,-1,5`
5656

5757
事实上,对于 file 数据源,`indexes` 还有一种设置方式,不需要遵循文件信息的字段,此时需要中括号 [],参数格式为 `[key1:index1,key2:index2,key3:index3,...]`
58-
例如,输入行以分隔符分割得到字符串数据其中包含三个字段,分别表示<文件名>、<文件大小>、<时间>,那么可以设置 `indexes=[key:0,size:1,datetime:2]`
59-
如输入行是包含 key,size,datetime 等字段的 json,则可以设置 `indexes=[key:key,size:key,datetime:datetime]`,表示目标对象字段需要 key,
60-
size,datetime,且从输入行中进行解析的索引分别为 key,size:key,datetime。因此 `indexes` 可以设置多个键值对,每个键值对都表示程序中字段与输入
61-
行中索引的对应关系,即 `<key>:<index>``<key>` 即为表示实际含义的对象字段名,`<index>` 可以为数字或字符串,即将输入行按照一种格式解析后可以读
62-
取对象字段值的索引,为数字且输入格式为 tab/csv 时表示输入行可分隔为 value 数组,采用数组下标的方式读取目标值,为字符串时可以是 json 行的原始字段名。
58+
由于命令行终端可能对该参数格式字符敏感,故可能需要加上 `"` 来设置,例如,输入行以分隔符分割得到字符串数据其中包含三个字段,分别表示<文件名>、<文件大小>、
59+
<时间>,那么可以设置 `indexes="[key:0,size:1,datetime:2]"`,如输入行是包含 key,size,datetime 等字段的 json,则可以设置
60+
`indexes="[key:key,size:key,datetime:datetime]"`,表示目标对象字段需要 key,size,datetime,且从输入行中进行解析的索引分别为 key,size,key,datetime。
61+
因此 `indexes` 可以设置多个键值对,每个键值对都表示程序中字段与输入行中索引的对应关系,即 `<key>:<index>``<key>` 即为表示实际含义的对象字段名,
62+
`<index>` 可以为数字或字符串,即将输入行按照一种格式解析后可以读取对象字段值的索引,为数字且输入格式为 tab/csv 时表示输入行可分隔为 value 数组,
63+
采用数组下标的方式读取目标值,为字符串时可以是 json 行的原始字段名。
6364

6465
#### 关于并发处理
6566
(1) 云存储数据源,从存储空间中列举文件,可多线程并发列举,用于支持大量文件的加速列举,线程数在配置文件中指定,自动按照线程数检索前缀并执行并发列举。

docs/pfop.md

+8-4
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,15 @@ pfop-config=
4444
"pfop":[
4545
{
4646
"cmd":"avthumb/mp4/s/1280x720/autoscale/1",
47-
"saveas":"bucket:$(key)F720.mp4"
47+
"saveas":"bucket:$(name)_F720.mp4"
48+
},
49+
{
50+
"cmd":"avthumb/mp4/s/720x480/autoscale/1",
51+
"saveas":"bucket:480p-$(key)"
4852
},
4953
{
5054
"cmd":"avsmart/mp4",
51-
"saveas":"bucket:$(key)-avsmart.mp4"
55+
"saveas":"bucket:$(name)-avsmart.mp4"
5256
}
5357
]
5458
}
@@ -63,9 +67,9 @@ pfop-config=
6367

6468
### 关于 saveas
6569
##### 魔法变量
66-
`$(name)` 表示完整的原始文件名(如 a.jpg/a.png 的 $(name) 分别为为 a.jpg/a.png)
67-
`$(key)` 表示去除后缀的原始文件名(如 a.jpg/a.png/a 的 $(key) 均为 a)
70+
`$(name)` 表示去除后缀的原始文件名(如 a.jpg/a.png/a 的 $(name) 均为 a)
6871
`$(ext)` 表示文件名的后缀部分(如 a.jpg/b.jpg 的 $(ext) 均为 jpg,c 的 $(ext) 为空字符串)
72+
`$(key)` 表示完整的原始文件名(如 a.jpg/a.png 的 $(key) 分别为为 a.jpg/a.png)
6973
##### 格式拼接
7074
格式需要遵循 `<bucket>:<key>`,允许只有 `<bucket>`,此时表示由七牛自动生成文件名,但是不允许缺少 `<bucket>`,且不允许以 `:` 开头或结尾的格式。
7175

docs/pfopcmd.md

+21-11
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@
1212
```
1313
process=pfopcmd
1414
indexes=
15+
avinfo-index=
1516
pfop-config=
1617
duration=
1718
size=
18-
avinfo-index=
19+
combine=true/false
1920
#cmd=
2021
#saveas=
2122
#scale=
@@ -25,9 +26,10 @@ avinfo-index=
2526
|process=pfopcmd| 该操作设置为pfopcmd| 表示根据 avinfo 生成音视频转码指令|
2627
|indexes|字符串| 设置输入行中 key 字段的下标(有默认值),参考[数据源 indexes 设置](datasource.md#1-公共参数)|
2728
|pfop-config| 文件路径字符串| 进行转码和另存规则设置的 json 配置文件路径,可设置多个转码条件和指令,[配置写法](#pfop-config-配置文件)|
28-
|duration| true/false| 得到的结果行中是否需要保存 duration(音视频时长)信息,会放在转码指令字段之后 |
29-
|size| true/false| 得到的结果行中是否需要保存 size(音视频时长)信息,会放在 duration 字段之后|
3029
|avinfo-index| 字符串| 读取 avinfo 信息时需要设置的 avinfo 字符串索引(下标),必须指定才能进行处理|
30+
|duration| true/false| 得到的结果行中是否需要保存 duration(音视频时长)信息,会放在转码指令字段之后 |
31+
|size| true/false| 得到的结果行中是否需要保存 size(音视频大小)信息,会放在 duration 字段之后|
32+
|combine| true/false| 多个 pfop 命令时,是否组合成一个命令来处理,默认为 true,使用 `;` 来拼接多条处理命令,参考[persistentOps 多个命令](https://developer.qiniu.com/dora/api/3686/pfop-directions-for-use#1)|
3133
|cmd| 字符串| pfop 命令,如 avthumb/mp4,和 pfop-config 中的 cmd 相同,如果不想设置 pfop-config 配置文件则可采用 cmd + saveas + scale 设置的方式|
3234
|saveas| 字符串| saveas 的格式,如 bucket:$(key)F720.mp4,和 pfop-config 中的 saveas 相同,如果不想设置 pfop-config 配置文件则可采用 cmd + saveas + scale 设置的方式|
3335
|scale| 字符串| scale 的格式,如 `[1000,1280]`,和 pfop-config 中的 scale 相同,如果不想设置 pfop-config 配置文件则可采用 cmd + saveas + scale 设置的方式|
@@ -39,12 +41,20 @@ avinfo-index=
3941
{
4042
"scale":[1000,1280],
4143
"cmd":"avthumb/mp4/s/1280x720/autoscale/1",
42-
"saveas":"bucket:$(key)F720.mp4"
44+
"saveas":"bucket:$(name)_F720.mp4"
4345
},
4446
{
4547
"scale":[1280],
4648
"cmd":"avthumb/mp4/s/1280x720/autoscale/1",
47-
"saveas":"bucket:$(key)F1080"
49+
"saveas":"bucket:1080P-$(key)"
50+
},
51+
{
52+
"cmd":"avthumb/mp4/s/640x480/autoscale/1",
53+
"saveas":"bucket:$(name)_F480.mp4"
54+
},
55+
{
56+
"cmd":"avthumb/mp4/s/640x480/autoscale/1/ss/0/t/$(duration)",
57+
"saveas":"bucket:$(name)_F480.mp4"
4858
}
4959
]
5060
}
@@ -55,15 +65,15 @@ avinfo-index=
5565
|-----|-----|
5666
|key|上述配置文件中的 F720 为转码项名称,设置为 json key,key 不可重复,重复情况下后者会覆盖前者|
5767
|scale| 表示视频分辨率 width 的范围,只设置了一个值则表示目标范围大于该值,程序根据 avinfo 判断宽度范围对在此区间的文件生成转码指令|
58-
|cmd| 需要指定的转码指令 |
68+
|cmd| 需要指定的转码指令,这里 cmd 支持[魔法变量](#魔法变量) |
5969
|saveas| 转码结果另存的格式,写法为:`<bucket>:<key>`,其中 `<key>` 支持[魔法变量](#魔法变量)|
6070

61-
### 关于 saveas
62-
##### 魔法变量
63-
`$(name)` 表示完整的原始文件名(如 a.jpg/a.png 的 $(name) 分别为为 a.jpg/a.png)
64-
`$(key)` 表示去除后缀的原始文件名(如 a.jpg/a.png/a 的 $(key) 均为 a)
71+
#### 魔法变量
72+
`$(duration)` 表示使用 avinfo 中 format 封装信息中的 duration 值来设置该参数
73+
`$(name)` 表示去除后缀的原始文件名(如 a.jpg/a.png/a 的 $(name) 均为 a)
6574
`$(ext)` 表示文件名的后缀部分(如 a.jpg/b.jpg 的 $(ext) 均为 jpg,c 的 $(ext) 为空字符串)
66-
##### 格式拼接
75+
`$(key)` 表示完整的原始文件名(如 a.jpg/a.png 的 $(key) 分别为为 a.jpg/a.png)
76+
#### saveas 格式拼接
6777
格式需要遵循 `<bucket>:<key>`,允许只有 `<bucket>`,此时表示由七牛自动生成文件名,但是不允许缺少 `<bucket>`,且不允许以 `:` 开头或结尾的格式。
6878

6979
### 命令行方式

docs/stat.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,4 @@ indexes=
2828
```
2929

3030
## 备注
31-
stat 操作是 file 源下的操作,从 every line of file 的 key-index 索引获取文件名,当使用 file 源且 parse=tab/csv 时下标必须为整数。
31+
stat 操作是 file 源下的操作,从 every line of file 的 key 索引(indexes 参数的第一个索引值,默认为 0)获取文件名,当使用 file 源且 parse=tab/csv 时下标必须为整数。

pom.xml

+4-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66

77
<groupId>com.qiniu</groupId>
88
<artifactId>qsuits</artifactId>
9-
<version>8.0.13</version>
10-
<name>qiniu-suits-java</name>
9+
<version>8.1.0</version>
10+
<name>qsuits</name>
1111
<description>qiniu-suits is a efficient tools for qiniu api implemented by java8.</description>
1212
<url>https://github.com/NigelWu95/qiniu-suits-java</url>
1313

@@ -444,6 +444,7 @@
444444

445445
<plugins>
446446
<plugin>
447+
<inherited>true</inherited>
447448
<groupId>org.apache.maven.plugins</groupId>
448449
<artifactId>maven-compiler-plugin</artifactId>
449450
<version>3.8.1</version>
@@ -457,6 +458,7 @@
457458
</configuration>
458459
</plugin>
459460
<plugin>
461+
<inherited>true</inherited>
460462
<groupId>org.apache.maven.plugins</groupId>
461463
<artifactId>maven-assembly-plugin</artifactId>
462464
<version>2.5.5</version>

qiniu-suits-java.iml qsuits.iml

File renamed without changes.

resources/process.json

+13-5
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,31 @@
22
"pfop":[
33
{
44
"cmd":"avthumb/mp4/s/1280x720/autoscale/1",
5-
"saveas":"bucket:$(name)F720.mp4"
5+
"saveas":"bucket:$(name)_F720.mp4"
66
},
77
{
88
"cmd":"avthumb/mp4/s/720x480/autoscale/1",
9-
"saveas":"bucket:$(name)F480.mp4"
9+
"saveas":"bucket:$(name)_F480.mp4"
10+
},
11+
{
12+
"cmd":"avthumb/mp4/s/640x480/autoscale/1",
13+
"saveas":"bucket:F480-$(key)"
1014
}
1115
],
1216
"pfopcmd":[
1317
{
1418
"scale":[1000,1280],
1519
"cmd":"avthumb/mp4/s/1280x720/autoscale/1",
16-
"saveas":"bucket:$(key)F720.mp4"
20+
"saveas":"bucket:$(name)_F720.mp4"
1721
},
1822
{
1923
"scale":[1280],
20-
"cmd":"avthumb/mp4/s/1280x720/autoscale/1",
21-
"saveas":"bucket:$(key)F1080"
24+
"cmd":"avthumb/mp4/s/1920x1080/autoscale/1",
25+
"saveas":"bucket:$(name)_F1080.mp4"
26+
},
27+
{
28+
"cmd":"avthumb/mp4/s/640x480/autoscale/1",
29+
"saveas":"bucket:F480-$(key)"
2230
}
2331
]
2432
}

src/main/java/com/qiniu/datasource/AliLister.java

+3-14
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
import com.aliyun.oss.model.OSSObjectSummary;
88
import com.aliyun.oss.model.ObjectListing;
99
import com.qiniu.common.SuitsException;
10-
import com.qiniu.interfaces.ILister;
10+
import com.qiniu.interfaces.IStorageLister;
1111
import com.qiniu.util.CloudApiUtils;
1212

1313
import java.util.List;
1414

15-
public class AliLister implements ILister<OSSObjectSummary> {
15+
public class AliLister implements IStorageLister<OSSObjectSummary> {
1616

1717
private OSSClient ossClient;
1818
private ListObjectsRequest listObjectsRequest;
@@ -49,18 +49,11 @@ public AliLister(OSSClient ossClient, String bucket, String prefix, String marke
4949
}
5050

5151
@Override
52-
public String getBucket() {
53-
return listObjectsRequest.getBucketName();
54-
}
55-
5652
public String getPrefix() {
5753
return listObjectsRequest.getPrefix();
5854
}
5955

60-
public void setMarker(String marker) {
61-
listObjectsRequest.setMarker("".equals(marker) ? null : marker);
62-
}
63-
56+
@Override
6457
public String getMarker() {
6558
return listObjectsRequest.getMarker();
6659
}
@@ -83,10 +76,6 @@ public void setLimit(int limit) {
8376
listObjectsRequest.setMaxKeys(limit);
8477
}
8578

86-
public int getLimit() {
87-
return listObjectsRequest.getMaxKeys();
88-
}
89-
9079
private void checkedListWithEnd() {
9180
if (endPrefix == null || "".equals(endPrefix)) return;
9281
String endKey = currentEndKey();

src/main/java/com/qiniu/datasource/AliOssContainer.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import com.qiniu.convert.JsonObjectPair;
1212
import com.qiniu.convert.StringBuilderPair;
1313
import com.qiniu.convert.StringMapPair;
14-
import com.qiniu.interfaces.ILister;
14+
import com.qiniu.interfaces.IStorageLister;
1515
import com.qiniu.interfaces.IStringFormat;
1616
import com.qiniu.interfaces.ITypeConvert;
1717
import com.qiniu.persistence.FileSaveMapper;
@@ -89,7 +89,7 @@ protected IResultOutput<BufferedWriter> getNewResultSaver(String order) throws I
8989
}
9090

9191
@Override
92-
protected ILister<OSSObjectSummary> getLister(String prefix, String marker, String start, String end, int unitLen) throws SuitsException {
92+
protected IStorageLister<OSSObjectSummary> getLister(String prefix, String marker, String start, String end, int unitLen) throws SuitsException {
9393
if (marker == null || "".equals(marker)) marker = CloudApiUtils.getAliOssMarker(start);
9494
try {
9595
return new AliLister(new OSSClient(endpoint, new DefaultCredentialProvider(credentials),

src/main/java/com/qiniu/datasource/AwsS3Container.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import com.qiniu.convert.JsonObjectPair;
1313
import com.qiniu.convert.StringBuilderPair;
1414
import com.qiniu.convert.StringMapPair;
15-
import com.qiniu.interfaces.ILister;
15+
import com.qiniu.interfaces.IStorageLister;
1616
import com.qiniu.interfaces.IStringFormat;
1717
import com.qiniu.interfaces.ITypeConvert;
1818
import com.qiniu.persistence.FileSaveMapper;
@@ -106,7 +106,7 @@ protected IResultOutput<BufferedWriter> getNewResultSaver(String order) throws I
106106
}
107107

108108
@Override
109-
protected ILister<S3ObjectSummary> getLister(String prefix, String marker, String start, String end, int unitLen) throws SuitsException {
109+
protected IStorageLister<S3ObjectSummary> getLister(String prefix, String marker, String start, String end, int unitLen) throws SuitsException {
110110
// AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
111111
// .withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials(accessKeyId, secretKey)))
112112
// .withRegion(region)

src/main/java/com/qiniu/datasource/AwsS3Lister.java

+2-17
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
import com.amazonaws.services.s3.model.ListObjectsV2Result;
88
import com.amazonaws.services.s3.model.S3ObjectSummary;
99
import com.qiniu.common.SuitsException;
10-
import com.qiniu.interfaces.ILister;
10+
import com.qiniu.interfaces.IStorageLister;
1111
import com.qiniu.util.CloudApiUtils;
1212

1313
import java.util.List;
1414

15-
public class AwsS3Lister implements ILister<S3ObjectSummary> {
15+
public class AwsS3Lister implements IStorageLister<S3ObjectSummary> {
1616

1717
private AmazonS3 s3Client;
1818
private ListObjectsV2Request listObjectsRequest;
@@ -36,21 +36,11 @@ public AwsS3Lister(AmazonS3 s3Client, String bucket, String prefix, String marke
3636
count += s3ObjectList.size();
3737
}
3838

39-
@Override
40-
public String getBucket() {
41-
return listObjectsRequest.getBucketName();
42-
}
43-
4439
@Override
4540
public String getPrefix() {
4641
return listObjectsRequest.getPrefix();
4742
}
4843

49-
@Override
50-
public void setMarker(String marker) {
51-
listObjectsRequest.setContinuationToken("".equals(marker) ? null : marker);
52-
}
53-
5444
@Override
5545
public String getMarker() {
5646
return listObjectsRequest.getContinuationToken();
@@ -74,11 +64,6 @@ public void setLimit(int limit) {
7464
listObjectsRequest.withMaxKeys(limit);
7565
}
7666

77-
@Override
78-
public int getLimit() {
79-
return listObjectsRequest.getMaxKeys();
80-
}
81-
8267
private void checkedListWithEnd() {
8368
if (endPrefix == null || "".equals(endPrefix)) return;
8469
String endKey = currentEndKey();

src/main/java/com/qiniu/datasource/BaiduBosContainer.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import com.qiniu.convert.JsonObjectPair;
1010
import com.qiniu.convert.StringBuilderPair;
1111
import com.qiniu.convert.StringMapPair;
12-
import com.qiniu.interfaces.ILister;
12+
import com.qiniu.interfaces.IStorageLister;
1313
import com.qiniu.interfaces.IResultOutput;
1414
import com.qiniu.interfaces.IStringFormat;
1515
import com.qiniu.interfaces.ITypeConvert;
@@ -89,7 +89,7 @@ protected IResultOutput<BufferedWriter> getNewResultSaver(String order) throws I
8989
}
9090

9191
@Override
92-
protected ILister<BosObjectSummary> getLister(String prefix, String marker, String start, String end, int unitLen) throws SuitsException {
92+
protected IStorageLister<BosObjectSummary> getLister(String prefix, String marker, String start, String end, int unitLen) throws SuitsException {
9393
if (marker == null || "".equals(marker)) marker = CloudApiUtils.getAliOssMarker(start);
9494
BosClient bosClient = new BosClient(this.configuration);
9595
try {

src/main/java/com/qiniu/datasource/BaiduLister.java

+3-14
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
import com.baidubce.services.bos.model.ListObjectsRequest;
88
import com.baidubce.services.bos.model.ListObjectsResponse;
99
import com.qiniu.common.SuitsException;
10-
import com.qiniu.interfaces.ILister;
10+
import com.qiniu.interfaces.IStorageLister;
1111
import com.qiniu.util.CloudApiUtils;
1212

1313
import java.util.List;
1414

15-
public class BaiduLister implements ILister<BosObjectSummary> {
15+
public class BaiduLister implements IStorageLister<BosObjectSummary> {
1616

1717
private BosClient bosClient;
1818
private ListObjectsRequest listObjectsRequest;
@@ -34,18 +34,11 @@ public BaiduLister(BosClient bosClient, String bucket, String prefix, String mar
3434
}
3535

3636
@Override
37-
public String getBucket() {
38-
return listObjectsRequest.getBucketName();
39-
}
40-
4137
public String getPrefix() {
4238
return listObjectsRequest.getPrefix();
4339
}
4440

45-
public void setMarker(String marker) {
46-
listObjectsRequest.setMarker("".equals(marker) ? null : marker);
47-
}
48-
41+
@Override
4942
public String getMarker() {
5043
return listObjectsRequest.getMarker();
5144
}
@@ -68,10 +61,6 @@ public void setLimit(int limit) {
6861
listObjectsRequest.setMaxKeys(limit);
6962
}
7063

71-
public int getLimit() {
72-
return listObjectsRequest.getMaxKeys();
73-
}
74-
7564
private void checkedListWithEnd() {
7665
if (endPrefix == null || "".equals(endPrefix)) return;
7766
String endKey = currentEndKey();

0 commit comments

Comments
 (0)