1 /*
2 * Copyright 2009-2017 Alibaba Cloud All rights reserved.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17
18 #include <alibabacloud/oss/model/CompleteMultipartUploadRequest.h>
19 #include <sstream>
20 #include "utils/Utils.h"
21 #include "ModelError.h"
22
23 using namespace AlibabaCloud::OSS;
24
CompleteMultipartUploadRequest(const std::string & bucket,const std::string & key)25 CompleteMultipartUploadRequest::CompleteMultipartUploadRequest(
26 const std::string &bucket, const std::string &key) :
27 CompleteMultipartUploadRequest(bucket, key, PartList())
28 {
29 }
30
CompleteMultipartUploadRequest(const std::string & bucket,const std::string & key,const PartList & partList)31 CompleteMultipartUploadRequest::CompleteMultipartUploadRequest(
32 const std::string &bucket,
33 const std::string &key, const PartList &partList) :
34 CompleteMultipartUploadRequest(bucket, key, partList, "")
35 {
36 }
37
CompleteMultipartUploadRequest(const std::string & bucket,const std::string & key,const PartList & partList,const std::string & uploadId)38 CompleteMultipartUploadRequest::CompleteMultipartUploadRequest(
39 const std::string &bucket, const std::string &key,
40 const PartList &partList, const std::string &uploadId):
41 OssObjectRequest(bucket, key),
42 partList_(partList),
43 uploadId_(uploadId),
44 encodingTypeIsSet_(false)
45 {
46 setFlags(Flags() | REQUEST_FLAG_CONTENTMD5);
47 }
48
validate() const49 int CompleteMultipartUploadRequest::validate() const
50 {
51 int ret = OssObjectRequest::validate();
52
53 if (ret != 0) {
54 return ret;
55 }
56
57 if(partList_.empty())
58 return ARG_ERROR_MULTIPARTUPLOAD_PARTLIST_EMPTY;
59
60 return 0;
61 }
62
setPartList(const PartList & partList)63 void CompleteMultipartUploadRequest::setPartList(const PartList &partList)
64 {
65 partList_ = partList;
66 }
67
setEncodingType(const std::string & encodingType)68 void CompleteMultipartUploadRequest::setEncodingType(const std::string &encodingType)
69 {
70 encodingType_ = encodingType;
71 encodingTypeIsSet_ = true;
72 }
73
setUploadId(const std::string & uploadId)74 void CompleteMultipartUploadRequest::setUploadId(const std::string &uploadId)
75 {
76 uploadId_ = uploadId;
77 }
78
setAcl(CannedAccessControlList acl)79 void CompleteMultipartUploadRequest::setAcl(CannedAccessControlList acl)
80 {
81 metaData_.addHeader("x-oss-object-acl", ToAclName(acl));
82 }
83
setCallback(const std::string & callback,const std::string & callbackVar)84 void CompleteMultipartUploadRequest::setCallback(const std::string& callback, const std::string& callbackVar)
85 {
86 metaData_.removeHeader("x-oss-callback");
87 metaData_.removeHeader("x-oss-callback-var");
88
89 if (!callback.empty()) {
90 metaData_.addHeader("x-oss-callback", callback);
91 }
92
93 if (!callbackVar.empty()) {
94 metaData_.addHeader("x-oss-callback-var", callbackVar);
95 }
96 }
97
MetaData()98 ObjectMetaData& CompleteMultipartUploadRequest::MetaData()
99 {
100 return metaData_;
101 }
specialParameters() const102 ParameterCollection CompleteMultipartUploadRequest::specialParameters()const
103 {
104 ParameterCollection parameters;
105 parameters["uploadId"] = uploadId_;
106 if(encodingTypeIsSet_)
107 {
108 parameters["encoding-type"] = encodingType_;
109 }
110 return parameters;
111 }
112
specialHeaders() const113 HeaderCollection CompleteMultipartUploadRequest::specialHeaders() const
114 {
115 auto headers = metaData_.toHeaderCollection();
116 auto baseHeaders = OssObjectRequest::specialHeaders();
117 headers.insert(baseHeaders.begin(), baseHeaders.end());
118 return headers;
119 }
120
payload() const121 std::string CompleteMultipartUploadRequest::payload() const
122 {
123 std::stringstream ss;
124 ss << "<CompleteMultipartUpload>" << std::endl;
125 for (auto const &part : partList_) {
126 ss << "<Part>" << std::endl;
127 ss << " <PartNumber>";
128 ss << std::to_string(part.PartNumber());
129 ss << "</PartNumber>" << std::endl;
130 ss << " <ETag>";
131 ss << part.ETag();
132 ss << "</ETag>" << std::endl;
133 ss << "</Part>";
134 }
135 ss << "</CompleteMultipartUpload>";
136 return ss.str();
137 }
138