|
48 | 48 | import static com.aliyun.oss.internal.RequestParameters.SUBRESOURCE_ACL; |
49 | 49 | import static com.aliyun.oss.internal.RequestParameters.SUBRESOURCE_DELETE; |
50 | 50 | import static com.aliyun.oss.internal.RequestParameters.SUBRESOURCE_OBJECTMETA; |
| 51 | +import static com.aliyun.oss.internal.RequestParameters.SUBRESOURCE_SYMLINK; |
51 | 52 | import static com.aliyun.oss.internal.ResponseParsers.appendObjectResponseParser; |
52 | 53 | import static com.aliyun.oss.internal.ResponseParsers.copyObjectResponseParser; |
53 | 54 | import static com.aliyun.oss.internal.ResponseParsers.deleteObjectsResponseParser; |
|
56 | 57 | import static com.aliyun.oss.internal.ResponseParsers.putObjectReponseParser; |
57 | 58 | import static com.aliyun.oss.internal.ResponseParsers.putObjectCallbackReponseParser; |
58 | 59 | import static com.aliyun.oss.internal.ResponseParsers.getSimplifiedObjectMetaResponseParser; |
| 60 | +import static com.aliyun.oss.internal.ResponseParsers.getSymbolicLinkResponseParser; |
| 61 | + |
| 62 | + |
59 | 63 |
|
60 | 64 | import java.io.BufferedOutputStream; |
61 | 65 | import java.io.ByteArrayInputStream; |
|
102 | 106 | import com.aliyun.oss.model.CannedAccessControlList; |
103 | 107 | import com.aliyun.oss.model.CopyObjectRequest; |
104 | 108 | import com.aliyun.oss.model.CopyObjectResult; |
| 109 | +import com.aliyun.oss.model.CreateSymlinkRequest; |
105 | 110 | import com.aliyun.oss.model.DeleteObjectsRequest; |
106 | 111 | import com.aliyun.oss.model.DeleteObjectsResult; |
107 | 112 | import com.aliyun.oss.model.GenericRequest; |
108 | 113 | import com.aliyun.oss.model.GetObjectRequest; |
109 | 114 | import com.aliyun.oss.model.HeadObjectRequest; |
110 | 115 | import com.aliyun.oss.model.OSSObject; |
| 116 | +import com.aliyun.oss.model.OSSSymlink; |
111 | 117 | import com.aliyun.oss.model.ObjectAcl; |
112 | 118 | import com.aliyun.oss.model.ObjectMetadata; |
113 | 119 | import com.aliyun.oss.model.PutObjectRequest; |
@@ -536,6 +542,76 @@ public ObjectAcl getObjectAcl(GenericRequest genericRequest) |
536 | 542 | return doOperation(request, getObjectAclResponseParser, bucketName, key, true); |
537 | 543 | } |
538 | 544 |
|
| 545 | + public OSSSymlink getSymlink(GenericRequest genericRequest) |
| 546 | + throws OSSException, ClientException { |
| 547 | + assertParameterNotNull(genericRequest, "genericRequest"); |
| 548 | + |
| 549 | + String bucketName = genericRequest.getBucketName(); |
| 550 | + String symlink = genericRequest.getKey(); |
| 551 | + |
| 552 | + assertParameterNotNull(bucketName, "bucketName"); |
| 553 | + assertParameterNotNull(symlink, "symlink"); |
| 554 | + ensureBucketNameValid(bucketName); |
| 555 | + ensureObjectKeyValid(symlink); |
| 556 | + |
| 557 | + Map<String, String> params = new HashMap<String, String>(); |
| 558 | + params.put(SUBRESOURCE_SYMLINK, null); |
| 559 | + |
| 560 | + RequestMessage request = new OSSRequestMessageBuilder(getInnerClient()) |
| 561 | + .setEndpoint(getEndpoint()) |
| 562 | + .setMethod(HttpMethod.GET) |
| 563 | + .setBucket(bucketName) |
| 564 | + .setKey(symlink) |
| 565 | + .setParameters(params) |
| 566 | + .setOriginalRequest(genericRequest) |
| 567 | + .build(); |
| 568 | + |
| 569 | + OSSSymlink symbolicLink = doOperation( |
| 570 | + request, getSymbolicLinkResponseParser, bucketName, symlink, true); |
| 571 | + |
| 572 | + if (symbolicLink != null) { |
| 573 | + symbolicLink.setSymlink(new String(symlink)); |
| 574 | + } |
| 575 | + |
| 576 | + return symbolicLink; |
| 577 | + } |
| 578 | + |
| 579 | + public void createSymlink(CreateSymlinkRequest createSymlinkRequest) |
| 580 | + throws OSSException, ClientException { |
| 581 | + |
| 582 | + assertParameterNotNull(createSymlinkRequest, "createSymlinkRequest"); |
| 583 | + |
| 584 | + String bucketName = createSymlinkRequest.getBucketName(); |
| 585 | + String symlink = createSymlinkRequest.getSymlink(); |
| 586 | + String target = createSymlinkRequest.getTarget(); |
| 587 | + |
| 588 | + assertParameterNotNull(bucketName, "bucketName"); |
| 589 | + assertParameterNotNull(symlink, "symlink"); |
| 590 | + assertParameterNotNull(target, "target"); |
| 591 | + ensureBucketNameValid(bucketName); |
| 592 | + ensureObjectKeyValid(symlink); |
| 593 | + ensureObjectKeyValid(target); |
| 594 | + |
| 595 | + Map<String, String> headers = new HashMap<String, String>(); |
| 596 | + String encodeTargetObject = HttpUtil.urlEncode(target, DEFAULT_CHARSET_NAME); |
| 597 | + headers.put(OSSHeaders.OSS_HEADER_SYMLINK_TARGET, encodeTargetObject); |
| 598 | + |
| 599 | + Map<String, String> params = new HashMap<String, String>(); |
| 600 | + params.put(SUBRESOURCE_SYMLINK, null); |
| 601 | + |
| 602 | + RequestMessage request = new OSSRequestMessageBuilder(getInnerClient()) |
| 603 | + .setEndpoint(getEndpoint()) |
| 604 | + .setMethod(HttpMethod.PUT) |
| 605 | + .setBucket(bucketName) |
| 606 | + .setKey(symlink) |
| 607 | + .setHeaders(headers) |
| 608 | + .setParameters(params) |
| 609 | + .setOriginalRequest(createSymlinkRequest) |
| 610 | + .build(); |
| 611 | + |
| 612 | + doOperation(request, emptyResponseParser, bucketName, symlink); |
| 613 | + } |
| 614 | + |
539 | 615 | private static enum MetadataDirective { |
540 | 616 |
|
541 | 617 | /* Copy metadata from source object */ |
|
0 commit comments