Skip to content

Commit d250f10

Browse files
authored
Merge pull request #60 from aliyun/fix_gen_url
fix gen url
2 parents 19c4ca4 + e559a07 commit d250f10

File tree

8 files changed

+111
-28
lines changed

8 files changed

+111
-28
lines changed

src/main/java/com/aliyun/oss/OSSClient.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -785,6 +785,7 @@ public URL generatePresignedUrl(GeneratePresignedUrlRequest request)
785785
requestMessage.setEndpoint(OSSUtils.determineFinalEndpoint(endpoint, bucketName, config));
786786
requestMessage.setMethod(method);
787787
requestMessage.setResourcePath(resourcePath);
788+
requestMessage.setHeaders(request.getHeaders());
788789

789790
requestMessage.addHeader(HttpHeaders.DATE, expires);
790791
if (request.getContentType() != null && !request.getContentType().trim().equals("")) {

src/main/java/com/aliyun/oss/common/parser/RequestMarshallers.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,8 @@ public FixedLengthInputStream marshall(ImageProcess imageProcessConf) {
141141
xmlBody.append("<SourceFileProtectSuffix>" + imageProcessConf.getSourceFileProtectSuffix()
142142
+ "</SourceFileProtectSuffix>");
143143
xmlBody.append("<StyleDelimiters>" + imageProcessConf.getStyleDelimiters() + "</StyleDelimiters>");
144-
if (imageProcessConf.isDomainSupportProcess() != null &&
145-
imageProcessConf.isDomainSupportProcess().booleanValue()) {
144+
if (imageProcessConf.isDomainSupportAt() != null &&
145+
imageProcessConf.isDomainSupportAt().booleanValue()) {
146146
xmlBody.append("<OssDomainSupportAtProcess>Enabled</OssDomainSupportAtProcess>");
147147
} else {
148148
xmlBody.append("<OssDomainSupportAtProcess>Disabled</OssDomainSupportAtProcess>");

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ public PutObjectResult putObject(URL signedUrl, InputStream requestContent, long
175175
request.setHeaders(requestHeaders);
176176
request.setUseChunkEncoding(useChunkEncoding);
177177

178-
return doOperation(request, putObjectReponseParser, null, null, true);
178+
return doOperation(request, putObjectReponseParser, null, null, true);
179179
}
180180

181181
/**

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

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ public class GeneratePresignedUrlRequest {
6262
private Map<String, String> userMetadata = new HashMap<String, String>();
6363

6464
private Map<String, String> queryParam = new HashMap<String, String>();
65+
66+
private Map<String, String> headers = new HashMap<String, String>();
67+
6568
/**
6669
* 构造函数。默认的HTTP Method为{@link HttpMethod#GET}。
6770
* @param bucketName
@@ -294,5 +297,33 @@ public String getProcess() {
294297
public void setProcess(String process) {
295298
this.process = process;
296299
}
300+
301+
/**
302+
* 返回HTTP Headers
303+
* @return HTTP Headers
304+
*/
305+
public Map<String,String> getHeaders(){
306+
return this.headers;
307+
}
308+
309+
/**
310+
* HTTP请求头,HTTP Header。
311+
* @param headers
312+
* HTTP Headers。
313+
*/
314+
public void setHeaders(Map<String, String> headers) {
315+
if (headers == null){
316+
throw new NullPointerException("参数'queryParameter'为空指针。");
317+
}
318+
this.headers = headers;
319+
}
320+
321+
/**
322+
* @param paramter key
323+
* @param value
324+
*/
325+
public void addHeader(String key, String value) {
326+
this.headers.put(key, value);
327+
}
297328

298329
}

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

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,17 @@ public ImageProcess(String compliedHost, Boolean sourceFileProtect,
2727
this.sourceFileProtect = sourceFileProtect;
2828
this.sourceFileProtectSuffix = sourceFileProtectSuffix;
2929
this.styleDelimiters = styleDelimiters;
30+
this.domainSupportAt = null;
3031
}
3132

3233
public ImageProcess(String compliedHost, Boolean sourceFileProtect,
3334
String sourceFileProtectSuffix, String styleDelimiters,
34-
Boolean domainSupportProcess) {
35+
Boolean domainSupportAt) {
3536
this.compliedHost = compliedHost;
3637
this.sourceFileProtect = sourceFileProtect;
3738
this.sourceFileProtectSuffix = sourceFileProtectSuffix;
3839
this.styleDelimiters = styleDelimiters;
39-
this.domainSupportProcess = domainSupportProcess;
40+
this.domainSupportAt = domainSupportAt;
4041
}
4142

4243
public String getCompliedHost() {
@@ -79,12 +80,12 @@ public void setVersion(Integer version) {
7980
this.version = version;
8081
}
8182

82-
public Boolean isDomainSupportProcess() {
83-
return domainSupportProcess;
83+
public Boolean isDomainSupportAt() {
84+
return domainSupportAt;
8485
}
8586

86-
public void setDomainSupportProcess(Boolean domainSupportProcess) {
87-
this.domainSupportProcess = domainSupportProcess;
87+
public void setDomainSupportAt(Boolean domainSupportAt) {
88+
this.domainSupportAt = domainSupportAt;
8889
}
8990

9091
// Img表示设置的样式分隔符,只有Img能用;Both表示oss也能用Img的样式分隔符
@@ -97,7 +98,7 @@ public void setDomainSupportProcess(Boolean domainSupportProcess) {
9798
private String styleDelimiters;
9899
// 图片服务的版本目前是2,只能读取不能设置
99100
private Integer version;
100-
// 用户是否能够通过OSS域名使用老版图片处理接口。默认Disabled
101-
private Boolean domainSupportProcess;
101+
// 用户是否能够通过OSS域名使用老版图片处理接口,@格式。默认Disabled
102+
private Boolean domainSupportAt;
102103

103104
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public void testBucketImageProcessConf() {
4242
Assert.assertEquals(bucketProcess.getImageProcess().getSourceFileProtectSuffix(), "");
4343
Assert.assertEquals(bucketProcess.getImageProcess().getStyleDelimiters(), "");
4444
Assert.assertEquals(bucketProcess.getImageProcess().getVersion().intValue(), 2);
45-
Assert.assertEquals(bucketProcess.getImageProcess().isDomainSupportProcess(), null);
45+
Assert.assertEquals(bucketProcess.getImageProcess().isDomainSupportAt(), null);
4646

4747
// put 1
4848
ImageProcess imageProcess = new ImageProcess("Img", true, "jpg,png", "/,-");
@@ -56,7 +56,7 @@ public void testBucketImageProcessConf() {
5656
Assert.assertEquals(bucketProcess.getImageProcess().getSourceFileProtectSuffix(), "jpg,png");
5757
Assert.assertEquals(bucketProcess.getImageProcess().getStyleDelimiters(), "-,/");
5858
Assert.assertEquals(bucketProcess.getImageProcess().getVersion().intValue(), 2);
59-
Assert.assertEquals(bucketProcess.getImageProcess().isDomainSupportProcess(), null);
59+
Assert.assertEquals(bucketProcess.getImageProcess().isDomainSupportAt(), null);
6060

6161
// put 2
6262
imageProcess = new ImageProcess("Both", false, "gif", "-");
@@ -70,7 +70,7 @@ public void testBucketImageProcessConf() {
7070
Assert.assertEquals(bucketProcess.getImageProcess().getSourceFileProtectSuffix(), "");
7171
Assert.assertEquals(bucketProcess.getImageProcess().getStyleDelimiters(), "-");
7272
Assert.assertEquals(bucketProcess.getImageProcess().getVersion().intValue(), 2);
73-
Assert.assertEquals(bucketProcess.getImageProcess().isDomainSupportProcess(), null);
73+
Assert.assertEquals(bucketProcess.getImageProcess().isDomainSupportAt(), null);
7474

7575
// put 3
7676
imageProcess = new ImageProcess("Img", true, "*", "/", true);
@@ -84,7 +84,7 @@ public void testBucketImageProcessConf() {
8484
Assert.assertEquals(bucketProcess.getImageProcess().getSourceFileProtectSuffix(), "*");
8585
Assert.assertEquals(bucketProcess.getImageProcess().getStyleDelimiters(), "/");
8686
Assert.assertEquals(bucketProcess.getImageProcess().getVersion().intValue(), 2);
87-
Assert.assertEquals(bucketProcess.getImageProcess().isDomainSupportProcess(), null);
87+
Assert.assertEquals(bucketProcess.getImageProcess().isDomainSupportAt(), null);
8888

8989
} catch (Exception e) {
9090
Assert.fail(e.getMessage());

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

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,20 +23,27 @@
2323
import static com.aliyun.oss.integrationtests.TestUtils.genFixedLengthInputStream;
2424

2525
import java.io.InputStream;
26+
import java.net.URL;
2627
import java.util.ArrayList;
2728
import java.util.Arrays;
29+
import java.util.Date;
30+
import java.util.HashMap;
2831
import java.util.List;
32+
import java.util.Map;
2933

3034
import junit.framework.Assert;
3135

3236
import org.junit.Test;
3337

38+
import com.aliyun.oss.HttpMethod;
3439
import com.aliyun.oss.OSSErrorCode;
3540
import com.aliyun.oss.OSSException;
41+
import com.aliyun.oss.internal.OSSUtils;
3642
import com.aliyun.oss.model.Callback;
3743
import com.aliyun.oss.model.Callback.CalbackBodyType;
3844
import com.aliyun.oss.model.CompleteMultipartUploadRequest;
3945
import com.aliyun.oss.model.CompleteMultipartUploadResult;
46+
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
4047
import com.aliyun.oss.model.OSSObject;
4148
import com.aliyun.oss.model.PartETag;
4249
import com.aliyun.oss.model.PutObjectRequest;
@@ -682,4 +689,54 @@ public void testMultipartUploadCallbackJsonChar() {
682689
}
683690
}
684691

692+
@Test
693+
public void testGeneratePresignedUrlWithCallback() {
694+
String key = "generate-presigned-url-callback";
695+
696+
try {
697+
// callback
698+
Callback callback = new Callback();
699+
callback.setCallbackUrl(callbackUrl);
700+
callback.setCallbackHost("oss-cn-hangzhou.aliyuncs.com");
701+
callback.setCallbackBody("bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&"
702+
+ "mimeType=${mimeType}&my_var1=${x:var1}&my_var2=${x:var2}");
703+
callback.addCallbackVar("x:var1", "value1");
704+
callback.addCallbackVar("x:var2", "value2");
705+
callback.setCalbackBodyType(CalbackBodyType.URL);
706+
707+
// generate put url
708+
Map<String, String> cbHeaders = new HashMap<String, String>();
709+
OSSUtils.populateRequestCallback(cbHeaders, callback);
710+
711+
Date expiration = new Date(new Date().getTime() + 3600 * 1000);
712+
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, key, HttpMethod.PUT);
713+
request.setExpiration(expiration);
714+
request.setContentType("text/plain");
715+
request.setHeaders(cbHeaders);
716+
request.addHeader("x-oss-meta-author", "mingdi");
717+
718+
URL signedUrl = ossClient.generatePresignedUrl(request);
719+
720+
// put with url
721+
Map<String, String> customHeaders = new HashMap<String, String>(cbHeaders);
722+
customHeaders.put("Content-Type", "text/plain");
723+
customHeaders.put("x-oss-meta-author", "mingdi");
724+
725+
InputStream instream = genFixedLengthInputStream(instreamLength);
726+
PutObjectResult putResult = ossClient.putObject(signedUrl, instream, instreamLength, customHeaders);
727+
Assert.assertNull(putResult.getCallbackResponseBody());
728+
729+
// get object and check
730+
OSSObject ossObject = ossClient.getObject(bucketName, key);
731+
Assert.assertEquals(key, ossObject.getKey());
732+
Assert.assertEquals(instreamLength, ossObject.getObjectMetadata().getContentLength());
733+
Assert.assertEquals("mingdi", ossObject.getObjectMetadata().getUserMetadata().get("author"));
734+
ossObject.getObjectContent().close();
735+
736+
} catch (Exception ex) {
737+
ex.printStackTrace();
738+
Assert.fail(ex.getMessage());
739+
}
740+
}
741+
685742
}

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

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,19 +22,12 @@
2222
public final class TestConfig {
2323

2424
// OSS test configuration
25-
// public static String OSS_TEST_ENDPOINT = null;
26-
// public static String OSS_TEST_REGION = null;
27-
// public static String OSS_TEST_ACCESS_KEY_ID = null;
28-
// public static String OSS_TEST_ACCESS_KEY_SECRET = null;
29-
// public static String OSS_TEST_ACCESS_KEY_ID_1 = null;
30-
// public static String OSS_TEST_ACCESS_KEY_SECRET_1 = null;
31-
32-
public static String OSS_TEST_ENDPOINT = "http://oss-us-west-1.aliyuncs.com";
33-
public static String OSS_TEST_REGION = null;
34-
public static String OSS_TEST_ACCESS_KEY_ID = "vX6ik2aG3MYYnouB";
35-
public static String OSS_TEST_ACCESS_KEY_SECRET = "MkvsblmKhReBIETFrfmcm92iI479Yl";
36-
public static String OSS_TEST_ACCESS_KEY_ID_1 = null;
37-
public static String OSS_TEST_ACCESS_KEY_SECRET_1 = null;
25+
public static String OSS_TEST_ENDPOINT = null;
26+
public static String OSS_TEST_REGION = null;
27+
public static String OSS_TEST_ACCESS_KEY_ID = null;
28+
public static String OSS_TEST_ACCESS_KEY_SECRET = null;
29+
public static String OSS_TEST_ACCESS_KEY_ID_1 = null;
30+
public static String OSS_TEST_ACCESS_KEY_SECRET_1 = null;
3831

3932
// OSS replication test configuration
4033
public static String OSS_TEST_REPLICATION_ENDPOINT = null;

0 commit comments

Comments
 (0)