Skip to content

Commit bb9e34a

Browse files
LYZhuiguangjun
authored andcommitted
Add traffic limit api & tests & examples
1 parent 4f79cf3 commit bb9e34a

27 files changed

+847
-75
lines changed

src/main/java/com/aliyun/oss/internal/OSSDownloadOperation.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,11 @@ public static ObjectStat getFileStat(OSSObjectOperation objectOperation, Downloa
188188
genericRequest.setRequestPayer(payer);
189189
}
190190

191+
String versionId = downloadFileRequest.getVersionId();
192+
if (versionId != null) {
193+
genericRequest.setVersionId(versionId);
194+
}
195+
191196
SimplifiedObjectMeta meta = objectOperation.getSimplifiedObjectMeta(genericRequest);
192197

193198
ObjectStat objStat = new ObjectStat();
@@ -575,11 +580,21 @@ public PartResult call() throws Exception {
575580
getObjectRequest.setResponseHeaders(downloadFileRequest.getResponseHeaders());
576581
getObjectRequest.setRange(downloadPart.start, downloadPart.end);
577582

583+
String versionId = downloadFileRequest.getVersionId();
584+
if (versionId != null) {
585+
getObjectRequest.setVersionId(versionId);
586+
}
587+
578588
Payer payer = downloadFileRequest.getRequestPayer();
579-
if(payer != null) {
589+
if (payer != null) {
580590
getObjectRequest.setRequestPayer(payer);
581591
}
582592

593+
int limit = downloadFileRequest.getTrafficLimit();
594+
if (limit > 0) {
595+
getObjectRequest.setTrafficLimit(limit);
596+
}
597+
583598
OSSObject ossObj = objectOperation.getObject(getObjectRequest);
584599
objectMetadata = ossObj.getObjectMetadata();
585600
content = ossObj.getObjectContent();

src/main/java/com/aliyun/oss/internal/OSSHeaders.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,8 @@ public interface OSSHeaders extends HttpHeaders {
7575

7676
static final String OSS_HEADER_CALLBACK = "x-oss-callback";
7777
static final String OSS_HEADER_CALLBACK_VAR = "x-oss-callback-var";
78-
7978
static final String OSS_HEADER_SYMLINK_TARGET = "x-oss-symlink-target";
79+
static final String OSS_HEADER_TRAFFIC_LIMIT = "x-oss-traffic-limit";
8080

8181
static final String OSS_STORAGE_CLASS = "x-oss-storage-class";
8282
static final String OSS_RESTORE = "x-oss-restore";

src/main/java/com/aliyun/oss/internal/OSSMultipartOperation.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,7 @@ public UploadPartResult uploadPart(UploadPartRequest uploadPartRequest) throws O
329329
populateUploadPartOptionalHeaders(uploadPartRequest, headers);
330330

331331
populateRequestPayerHeader(headers, uploadPartRequest.getRequestPayer());
332+
populateTrafficLimitHeader(headers, uploadPartRequest.getTrafficLimit());
332333

333334
// Use a LinkedHashMap to preserve the insertion order.
334335
Map<String, String> params = new LinkedHashMap<String, String>();
@@ -545,6 +546,12 @@ private static void populateRequestPayerHeader (Map<String, String> headers, Pay
545546
}
546547
}
547548

549+
private static void populateTrafficLimitHeader(Map<String, String> headers, int limit) {
550+
if (limit > 0) {
551+
headers.put(OSSHeaders.OSS_HEADER_TRAFFIC_LIMIT, String.valueOf(limit));
552+
}
553+
}
554+
548555
private static Long calcObjectCRCFromParts(List<PartETag> partETags) {
549556
long crc = 0;
550557
for (PartETag partETag : partETags) {

src/main/java/com/aliyun/oss/internal/OSSObjectOperation.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -653,8 +653,13 @@ public ObjectMetadata headObject(HeadObjectRequest headObjectRequest) throws OSS
653653

654654
populateRequestPayerHeader(headers, headObjectRequest.getRequestPayer());
655655

656+
Map<String, String> params = new HashMap<String, String>();
657+
if (headObjectRequest.getVersionId() != null) {
658+
params.put(RequestParameters.SUBRESOURCE_VRESION_ID, headObjectRequest.getVersionId());
659+
}
660+
656661
RequestMessage request = new OSSRequestMessageBuilder(getInnerClient()).setEndpoint(getEndpoint())
657-
.setMethod(HttpMethod.HEAD).setBucket(bucketName).setKey(key).setHeaders(headers)
662+
.setMethod(HttpMethod.HEAD).setBucket(bucketName).setKey(key).setHeaders(headers).setParameters(params)
658663
.setOriginalRequest(headObjectRequest).build();
659664

660665
return doOperation(request, headObjectResponseParser, bucketName, key);
@@ -706,6 +711,9 @@ public ObjectAcl getObjectAcl(GenericRequest genericRequest) throws OSSException
706711

707712
Map<String, String> params = new HashMap<String, String>();
708713
params.put(SUBRESOURCE_ACL, null);
714+
if (genericRequest.getVersionId() != null) {
715+
params.put(RequestParameters.SUBRESOURCE_VRESION_ID, genericRequest.getVersionId());
716+
}
709717

710718
Map<String, String> headers = new HashMap<String, String>();
711719
populateRequestPayerHeader(headers, genericRequest.getRequestPayer());
@@ -1096,6 +1104,7 @@ private <RequestType extends PutObjectRequest, ResponseType> ResponseType writeO
10961104
populateRequestMetadata(headers, metadata);
10971105
populateRequestCallback(headers, originalRequest.getCallback());
10981106
populateRequestPayerHeader(headers, originalRequest.getRequestPayer());
1107+
populateTrafficLimitHeader(headers, originalRequest.getTrafficLimit());
10991108

11001109
Map<String, String> params = new LinkedHashMap<String, String>();
11011110
populateWriteObjectParams(mode, originalRequest, params);
@@ -1200,6 +1209,7 @@ private static void populateGetObjectRequestHeaders(GetObjectRequest getObjectRe
12001209
}
12011210

12021211
populateRequestPayerHeader(headers, getObjectRequest.getRequestPayer());
1212+
populateTrafficLimitHeader(headers, getObjectRequest.getTrafficLimit());
12031213
}
12041214

12051215
private static void addDeleteObjectsRequiredHeaders(Map<String, String> headers, byte[] rawContent) {
@@ -1227,13 +1237,19 @@ private static void addGetObjectRangeHeader(long[] range, Map<String, String> he
12271237
RangeSpec rangeSpec = RangeSpec.parse(range);
12281238
headers.put(OSSHeaders.RANGE, rangeSpec.toString());
12291239
}
1230-
1240+
12311241
private static void populateRequestPayerHeader(Map<String, String> headers, Payer payer) {
12321242
if (payer != null && payer.equals(Payer.Requester)) {
12331243
headers.put(OSSHeaders.OSS_REQUEST_PAYER, payer.toString().toLowerCase());
12341244
}
12351245
}
12361246

1247+
private static void populateTrafficLimitHeader(Map<String, String> headers, int limit) {
1248+
if (limit > 0) {
1249+
headers.put(OSSHeaders.OSS_HEADER_TRAFFIC_LIMIT, String.valueOf(limit));
1250+
}
1251+
}
1252+
12371253
private static void populateWriteObjectParams(WriteMode mode, PutObjectRequest originalRequest,
12381254
Map<String, String> params) {
12391255

src/main/java/com/aliyun/oss/internal/OSSUploadOperation.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -415,7 +415,7 @@ private void prepare(UploadCheckPoint uploadCheckPoint, UploadFileRequest upload
415415
uploadFileRequest.getBucketName(), uploadFileRequest.getKey(), metadata);
416416

417417
Payer payer = uploadFileRequest.getRequestPayer();
418-
if(payer != null) {
418+
if (payer != null) {
419419
initiateUploadRequest.setRequestPayer(payer);
420420
}
421421

@@ -512,9 +512,14 @@ public PartResult call() throws Exception {
512512
uploadPartRequest.setPartSize(uploadPart.size);
513513

514514
Payer payer = uploadFileRequest.getRequestPayer();
515-
if(payer != null) {
515+
if (payer != null) {
516516
uploadPartRequest.setRequestPayer(payer);
517517
}
518+
519+
int limit = uploadFileRequest.getTrafficLimit();
520+
if (limit > 0) {
521+
uploadPartRequest.setTrafficLimit(limit);
522+
}
518523

519524
UploadPartResult uploadPartResult = multipartOperation.uploadPart(uploadPartRequest);
520525

@@ -565,7 +570,7 @@ public int compare(PartETag p1, PartETag p2) {
565570
uploadCheckPoint.partETags);
566571

567572
Payer payer = uploadFileRequest.getRequestPayer();
568-
if(payer != null) {
573+
if (payer != null) {
569574
completeUploadRequest.setRequestPayer(payer);
570575
}
571576

src/main/java/com/aliyun/oss/internal/RequestParameters.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,5 +117,6 @@ public final class RequestParameters {
117117
public static final String OSS_ACCESS_KEY_ID_PARAM = "x-oss-access-key-id";
118118
public static final String OSS_ADDITIONAL_HEADERS = "x-oss-additional-headers";
119119
public static final String OSS_SIGNATURE = "x-oss-signature";
120+
public static final String OSS_TRAFFIC_LIMIT = "x-oss-traffic-limit";
120121

121122
}

src/main/java/com/aliyun/oss/internal/ResponseParsers.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -461,7 +461,7 @@ public GetBucketPolicyResult parse(ResponseMessage response) throws ResponsePars
461461
GetBucketPolicyResult result = parseGetBucketPolicy(response.getContent());
462462
result.setRequestId(response.getRequestId());
463463
return result;
464-
}finally {
464+
} finally {
465465
safeCloseResponse(response);
466466
}
467467
}

src/main/java/com/aliyun/oss/internal/SignParameters.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public class SignParameters {
3737
SUBRESOURCE_PROCESS_CONF, SUBRESOURCE_SYMLINK, SUBRESOURCE_STAT, SUBRESOURCE_UDF, SUBRESOURCE_UDF_NAME,
3838
SUBRESOURCE_UDF_IMAGE, SUBRESOURCE_UDF_IMAGE_DESC, SUBRESOURCE_UDF_APPLICATION, SUBRESOURCE_UDF_LOG,
3939
SUBRESOURCE_RESTORE, SUBRESOURCE_VRESIONS, SUBRESOURCE_VRESIONING, SUBRESOURCE_VRESION_ID,
40-
SUBRESOURCE_ENCRYPTION, SUBRESOURCE_POLICY, SUBRESOURCE_REQUEST_PAYMENT});
40+
SUBRESOURCE_ENCRYPTION, SUBRESOURCE_POLICY, SUBRESOURCE_REQUEST_PAYMENT, OSS_TRAFFIC_LIMIT});
4141

4242

4343
}

src/main/java/com/aliyun/oss/internal/SignUtils.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ public static String buildSignedURL(GeneratePresignedUrlRequest request, Credent
152152

153153
Map<String, String> responseHeaderParams = new HashMap<String, String>();
154154
populateResponseHeaderParameters(responseHeaderParams, request.getResponseHeaders());
155+
populateTrafficLimitParams(responseHeaderParams, request.getTrafficLimit());
155156
if (responseHeaderParams.size() > 0) {
156157
requestMessage.setParameters(responseHeaderParams);
157158
}
@@ -226,4 +227,10 @@ public static String buildSignature(String secretAccessKey, String httpMethod, S
226227
String canonicalString = buildCanonicalString(httpMethod, resourcePath, request, null);
227228
return ServiceSignature.create().computeSignature(secretAccessKey, canonicalString);
228229
}
230+
231+
private static void populateTrafficLimitParams(Map<String, String> params, int limit) {
232+
if (limit > 0) {
233+
params.put(OSS_TRAFFIC_LIMIT, String.valueOf(limit));
234+
}
235+
}
229236
}

src/main/java/com/aliyun/oss/model/AppendObjectRequest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ public class AppendObjectRequest extends PutObjectRequest {
2727
private Long position;
2828
private Long initCRC;
2929

30+
// Traffic limit speed, its uint is bit/s
31+
private int trafficLimit;
32+
3033
public AppendObjectRequest(String bucketName, String key, File file) {
3134
this(bucketName, key, file, null);
3235
}
@@ -69,4 +72,19 @@ public AppendObjectRequest withInitCRC(Long iniCRC) {
6972
return this;
7073
}
7174

75+
/**
76+
* Sets traffic limit speed, its unit is bit/s
77+
*/
78+
public void setTrafficLimit(int trafficLimit) {
79+
this.trafficLimit = trafficLimit;
80+
}
81+
82+
/**
83+
* Gets traffic limit speed, its unit is bit/s
84+
* @return traffic limit speed
85+
*/
86+
public int getTrafficLimit() {
87+
return trafficLimit;
88+
}
89+
7290
}

0 commit comments

Comments
 (0)