Skip to content

Commit 7cbff9e

Browse files
author
jeffreykzli
committed
delete check & range set
1 parent 80146eb commit 7cbff9e

File tree

4 files changed

+40
-3
lines changed

4 files changed

+40
-3
lines changed

src/main/java/com/qcloud/cos/COSClient.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import java.util.List;
3939
import java.util.Map;
4040
import java.util.Map.Entry;
41+
import java.util.Objects;
4142

4243
import com.fasterxml.jackson.core.Version;
4344
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -143,6 +144,7 @@
143144
import com.qcloud.cos.utils.*;
144145
import com.qcloud.cos.http.TimeOutCosHttpClient;
145146

147+
import com.qcloud.cos.utils.Base64;
146148
import org.apache.commons.codec.DecoderException;
147149
import org.apache.http.client.methods.HttpRequestBase;
148150
import org.apache.http.entity.ContentType;
@@ -1072,8 +1074,16 @@ public COSObject getObject(GetObjectRequest getObjectRequest)
10721074
// Range
10731075
long[] range = getObjectRequest.getRange();
10741076
if (range != null) {
1075-
request.addHeader(Headers.RANGE,
1076-
"bytes=" + Long.toString(range[0]) + "-" + Long.toString(range[1]));
1077+
if (range[0] == -1) {
1078+
request.addHeader(Headers.RANGE,
1079+
"bytes=" + "-" + Long.toString(range[1]));
1080+
} else if (range[1] == -1) {
1081+
request.addHeader(Headers.RANGE,
1082+
"bytes=" + Long.toString(range[0]) + "-");
1083+
} else {
1084+
request.addHeader(Headers.RANGE,
1085+
"bytes=" + Long.toString(range[0]) + "-" + Long.toString(range[1]));
1086+
}
10771087
}
10781088
addResponseHeaderParameters(request, getObjectRequest.getResponseHeaders());
10791089

@@ -1274,6 +1284,11 @@ public void deleteObject(DeleteObjectRequest deleteObjectRequest)
12741284

12751285
rejectEmpty(deleteObjectRequest.getKey(),
12761286
"The length of the key must be greater than 0");
1287+
1288+
if (Objects.equals(deleteObjectRequest.getKey(), "/")) {
1289+
throw new IllegalArgumentException("The specified key should not be /");
1290+
}
1291+
12771292
CosHttpRequest<DeleteObjectRequest> request =
12781293
createRequest(deleteObjectRequest.getBucketName(), deleteObjectRequest.getKey(),
12791294
deleteObjectRequest, HttpMethodName.DELETE);

src/main/java/com/qcloud/cos/http/DefaultCosHttpClient.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,7 @@ public <X, Y extends CosServiceRequest> X exeute(CosHttpRequest<Y> request,
509509
}
510510
if (retryIndex != 0) {
511511
long delay = backoffStrategy.computeDelayBeforeNextRetry(retryIndex);
512+
request.addHeader("x-cos-sdk-retry", "true");
512513
Thread.sleep(delay);
513514
}
514515
HttpContext context = HttpClientContext.create();

src/main/java/com/qcloud/cos/model/GetObjectRequest.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -329,6 +329,20 @@ public void setRange(long start, long end) {
329329
range = new long[] {start, end};
330330
}
331331

332+
public void setRangeStart(long start) {
333+
if (start < 0) {
334+
throw new IllegalArgumentException("The range start should be greater than or equal to 0");
335+
}
336+
range = new long[] {start, -1L};
337+
}
338+
339+
public void setRangeEnd(long end) {
340+
if (end < 0) {
341+
throw new IllegalArgumentException("The range end should be greater than or equal to 0");
342+
}
343+
range = new long[] {-1L, end};
344+
}
345+
332346
/**
333347
* <p>
334348
* Sets the optional inclusive byte range within the desired object that will be downloaded by

src/main/java/com/qcloud/cos/transfer/TransferManager.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -721,7 +721,7 @@ private Download doDownload(final GetObjectRequest getObjectRequest, final File
721721
long lastByte;
722722

723723
long[] range = getObjectRequest.getRange();
724-
if (range != null && range.length == 2) {
724+
if (range != null && range.length == 2 && range[0] != -1 && range[1] != -1) {
725725
startingByte = range[0];
726726
lastByte = range[1];
727727
} else {
@@ -734,6 +734,13 @@ private Download doDownload(final GetObjectRequest getObjectRequest, final File
734734
final ObjectMetadata objectMetadata = cos.getObjectMetadata(getObjectMetadataRequest);
735735

736736
lastByte = objectMetadata.getContentLength() - 1;
737+
if (range != null && range.length == 2) {
738+
if (range[0] == -1) {
739+
startingByte = lastByte - range[1] + 1;
740+
} else {
741+
startingByte = range[0];
742+
}
743+
}
737744
}
738745
final long origStartingByte = startingByte;
739746
// We still pass the unfiltered listener chain into DownloadImpl

0 commit comments

Comments
 (0)