Skip to content

Commit 2a0807b

Browse files
authored
Merge pull request #66 from aliyun/fix-callback
fix callback
2 parents 5a7d568 + cdc37a7 commit 2a0807b

File tree

5 files changed

+68
-11
lines changed

5 files changed

+68
-11
lines changed

.travis.yml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@ jdk:
55
- oraclejdk7
66
- oraclejdk8
77
script:
8-
- mvn verify
9-
after_success:
10-
- mvn clean cobertura:cobertura coveralls:report
8+
- mvn install -DskipTests=true
119
env:
1210
global:
1311
- secure: ZSoc2bFoKqWEFRxMhuGawQLv1wYeOOHdF6QQmJOgFW8CnJC/LJ54QjttxEy5NAShq4YsVM7AiAtMqsqUlv8aBi0mFZBKCZToJ9Gvpu3nIUHTIzf9KQpeADbkEA/LQSYWTAjvNnuB0iatkTEZBRKkUCM4dX0Wh3gNORDrwxA6IuMpCdmGPvXrNhoQ7jbZwMj09O/77jNrrbWwUPk3SHNo9NMHv3GA6YHu4kwADCDi3r3syXrosjJR/wC2fsoF+NLP/Kp4lgh3GQoJ/JZDdK6lh16l50nA6uAwm1hPIzTiPpghW5TwG12Yb3jnrAe3MK08rmkClR9UgNSdjqz14VGAFXL68jAgzcmp4kX08c+myWrn+2Zh2u+pR+ORr67OBQ5nZqHQC3B9c9IM5w0l7H2TijDGmcSv34nFuaLjGeIHri9Sq3788qOBrVU7ztDlSkYdlEkUteYSuConv4KZFRBeoB2yvwvpSw6jOk2k1EjPf1AuHAFR0MNuuaX9csO2G2hvb7Z2dmsE2f6OLWuEM9cg/ORBMMzcBIGk3aGJKjLTwvhAzuvq76XPo3nRyiSnTyPm5YYREXK6lEdqrOOihFDUWmtHFbt2jo9f28/ZdcIvUcGUuZCzikRT1zUGvErUr62QPtOQ6c3tNqSkyW/5Gwie/5AhqgSjwh5dBxeCBX6xSMI=

README.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@
22

33
[![GitHub version](https://badge.fury.io/gh/aliyun%2Faliyun-oss-java-sdk.svg)](https://badge.fury.io/gh/aliyun%2Faliyun-oss-java-sdk)
44
[![Build Status](https://travis-ci.org/aliyun/aliyun-oss-java-sdk.svg?branch=master)](https://travis-ci.org/aliyun/aliyun-oss-java-sdk)
5-
[![Coverage Status](https://coveralls.io/repos/github/aliyun/aliyun-oss-java-sdk/badge.svg?branch=master)](https://coveralls.io/github/aliyun/aliyun-oss-java-sdk?branch=master)
65

76
## Requirements
87

9-
- Java 6+
8+
- Java 1.6+
109

1110
## Build
1211

@@ -18,7 +17,7 @@ mvn clean package -DskipTests
1817

1918
- to run function tests, you will have to config user account in src/test/java/com/aliyun/oss/integrationtests/TestConfig.java
2019

21-
## Authors && Contributors
20+
## Authors
2221

2322
- [Yubin Bai](https://github.com/baiyubin)
2423
- [Mengbang Xing](https://github.com/xingfeng2510)

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

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@
9696
import com.aliyun.oss.common.utils.ExceptionFactory;
9797
import com.aliyun.oss.common.utils.HttpHeaders;
9898
import com.aliyun.oss.common.utils.HttpUtil;
99+
import com.aliyun.oss.common.utils.IOUtils;
99100
import com.aliyun.oss.common.utils.RangeSpec;
100101
import com.aliyun.oss.event.ProgressEventType;
101102
import com.aliyun.oss.event.ProgressInputStream;
@@ -146,7 +147,7 @@ public PutObjectResult putObject(PutObjectRequest putObjectRequest)
146147
result = writeObjectInternal(WriteMode.OVERWRITE, putObjectRequest, putObjectCallbackReponseParser);
147148
}
148149

149-
if (getInnerClient().getClientConfiguration().isCrcCheckEnabled()) {
150+
if (isCrcCheckEnabled()) {
150151
OSSUtils.checkChecksum(result.getClientCRC(), result.getServerCRC(), result.getRequestId());
151152
}
152153

@@ -175,7 +176,18 @@ public PutObjectResult putObject(URL signedUrl, InputStream requestContent, long
175176
request.setHeaders(requestHeaders);
176177
request.setUseChunkEncoding(useChunkEncoding);
177178

178-
return doOperation(request, putObjectReponseParser, null, null, true);
179+
PutObjectResult result = null;
180+
if (requestHeaders.get(OSSHeaders.OSS_HEADER_CALLBACK) == null) {
181+
result = doOperation(request, putObjectReponseParser, null, null, true);
182+
} else {
183+
result = doOperation(request, putObjectCallbackReponseParser, null, null, true);
184+
}
185+
186+
if (isCrcCheckEnabled()) {
187+
OSSUtils.checkChecksum(result.getClientCRC(), result.getServerCRC(), result.getRequestId());
188+
}
189+
190+
return result;
179191
}
180192

181193
/**
@@ -193,8 +205,7 @@ public AppendObjectResult appendObject(AppendObjectRequest appendObjectRequest)
193205
(result.getNextPosition() - appendObjectRequest.getPosition())));
194206
}
195207

196-
if (getInnerClient().getClientConfiguration().isCrcCheckEnabled() &&
197-
appendObjectRequest.getInitCRC() != null) {
208+
if (isCrcCheckEnabled() && appendObjectRequest.getInitCRC() != null) {
198209
OSSUtils.checkChecksum(result.getClientCRC(), result.getServerCRC(), result.getRequestId());
199210
}
200211

@@ -295,6 +306,11 @@ public ObjectMetadata getObject(GetObjectRequest getObjectRequest, File file)
295306
outputStream.write(buffer, 0, bytesRead);
296307
}
297308

309+
if (isCrcCheckEnabled() && !hasRangeInRequest(getObjectRequest)) {
310+
Long clientCRC = IOUtils.getCRCValue(ossObject.getObjectContent());
311+
OSSUtils.checkChecksum(clientCRC, ossObject.getServerCRC(), ossObject.getRequestId());
312+
}
313+
298314
return ossObject.getObjectMetadata();
299315
} catch (IOException ex) {
300316
logException("Cannot read object content stream: ", ex);
@@ -782,6 +798,14 @@ ResponseType writeObjectInternal(WriteMode mode, RequestType originalRequest,
782798
}
783799
return result;
784800
}
801+
802+
private boolean isCrcCheckEnabled() {
803+
return getInnerClient().getClientConfiguration().isCrcCheckEnabled();
804+
}
805+
806+
private boolean hasRangeInRequest(GetObjectRequest getObjectRequest) {
807+
return getObjectRequest.getHeaders().get(OSSHeaders.RANGE) != null;
808+
}
785809

786810
private static void populateCopyObjectHeaders(CopyObjectRequest copyObjectRequest,
787811
Map<String, String> headers) {

src/test/java/com/aliyun/oss/integrationtests/CRCChecksumTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
package com.aliyun.oss.integrationtests;
2121

22+
import static com.aliyun.oss.integrationtests.TestUtils.genFixedLengthFile;
23+
2224
import java.io.ByteArrayInputStream;
2325
import java.io.File;
2426
import java.io.FileInputStream;
@@ -219,6 +221,32 @@ public void testGetObjectCRC() {
219221

220222
}
221223

224+
@Test
225+
public void testGetObjectToFileCRC() {
226+
String key = "get-object-to-file-crc";
227+
228+
try {
229+
InputStream inputStream = TestUtils.genFixedLengthInputStream(1024 * 100);
230+
PutObjectResult putObjectResult = ossClient.putObject(bucketName, key, inputStream);
231+
checkCRC(putObjectResult);
232+
233+
String filePath = genFixedLengthFile(0);
234+
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);
235+
ossClient.getObject(getObjectRequest, new File(filePath));
236+
237+
// 范围CRC上不支持
238+
getObjectRequest.setRange(100, 10000);
239+
getObjectRequest = new GetObjectRequest(bucketName, key);
240+
ossClient.getObject(getObjectRequest, new File(filePath));
241+
242+
ossClient.deleteObject(bucketName, key);
243+
} catch (Exception e) {
244+
e.printStackTrace();
245+
Assert.fail(e.getMessage());
246+
}
247+
248+
}
249+
222250
@Test
223251
public void testEmpytObjectCRC() {
224252
String key = "empty-object-crc";

src/test/java/com/aliyun/oss/integrationtests/CallbackTest.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import com.aliyun.oss.HttpMethod;
3939
import com.aliyun.oss.OSSErrorCode;
4040
import com.aliyun.oss.OSSException;
41+
import com.aliyun.oss.internal.OSSHeaders;
4142
import com.aliyun.oss.internal.OSSUtils;
4243
import com.aliyun.oss.model.Callback;
4344
import com.aliyun.oss.model.Callback.CalbackBodyType;
@@ -55,6 +56,7 @@
5556
* Test callBack of PutObject and MultipartUpload
5657
*
5758
*/
59+
@SuppressWarnings("unused")
5860
public class CallbackTest extends TestBase {
5961

6062
private static final String callbackUrl = "callback.oss-demo.com:23450";
@@ -716,6 +718,7 @@ public void testGeneratePresignedUrlWithCallback() {
716718
request.addHeader("x-oss-meta-author", "mingdi");
717719

718720
URL signedUrl = ossClient.generatePresignedUrl(request);
721+
System.out.println("SignedUrl:" + signedUrl);
719722

720723
// put with url
721724
Map<String, String> customHeaders = new HashMap<String, String>(cbHeaders);
@@ -724,7 +727,12 @@ public void testGeneratePresignedUrlWithCallback() {
724727

725728
InputStream instream = genFixedLengthInputStream(instreamLength);
726729
PutObjectResult putResult = ossClient.putObject(signedUrl, instream, instreamLength, customHeaders);
727-
Assert.assertNull(putResult.getCallbackResponseBody());
730+
731+
// check callback body
732+
byte[] buffer = new byte[bufferLength];
733+
int nRead = putResult.getCallbackResponseBody().read(buffer);
734+
putResult.getCallbackResponseBody().close();
735+
Assert.assertEquals(callbackResponse, new String(buffer, 0, nRead));
728736

729737
// get object and check
730738
OSSObject ossObject = ossClient.getObject(bucketName, key);

0 commit comments

Comments
 (0)