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 #include <alibabacloud/oss/model/ObjectMetaData.h>
18 #include <alibabacloud/oss/http/HttpType.h>
19 #include "utils/Utils.h"
20
21 using namespace AlibabaCloud::OSS;
22
23 static const std::string gEmpty = "";
24
ObjectMetaData(const HeaderCollection & data)25 ObjectMetaData::ObjectMetaData(const HeaderCollection& data)
26 {
27 *this = data;
28 }
29
operator =(const HeaderCollection & data)30 ObjectMetaData& ObjectMetaData::operator=(const HeaderCollection& data)
31 {
32 for (auto const &header : data) {
33 if (!header.first.compare(0, 11, "x-oss-meta-", 11))
34 userMetaData_[header.first.substr(11)] = header.second;
35 else
36 metaData_[header.first] = header.second;
37 }
38
39 if (metaData_.find(Http::ETAG) != metaData_.end()) {
40 metaData_[Http::ETAG] = TrimQuotes(metaData_.at(Http::ETAG).c_str());
41 }
42
43 return *this;
44 }
45
LastModified() const46 const std::string &ObjectMetaData::LastModified() const
47 {
48 if (metaData_.find(Http::LAST_MODIFIED) != metaData_.end()) {
49 return metaData_.at(Http::LAST_MODIFIED);
50 }
51 return gEmpty;
52 }
53
ExpirationTime() const54 const std::string &ObjectMetaData::ExpirationTime() const
55 {
56 if (metaData_.find(Http::EXPIRES) != metaData_.end()) {
57 return metaData_.at(Http::EXPIRES);
58 }
59 return gEmpty;
60 }
61
ContentLength() const62 int64_t ObjectMetaData::ContentLength() const
63 {
64 if (metaData_.find(Http::CONTENT_LENGTH) != metaData_.end()) {
65 return atoll(metaData_.at(Http::CONTENT_LENGTH).c_str());
66 }
67 return -1;
68 }
69
ContentType() const70 const std::string &ObjectMetaData::ContentType() const
71 {
72 if (metaData_.find(Http::CONTENT_TYPE) != metaData_.end()) {
73 return metaData_.at(Http::CONTENT_TYPE);
74 }
75 return gEmpty;
76 }
77
ContentEncoding() const78 const std::string &ObjectMetaData::ContentEncoding() const
79 {
80 if (metaData_.find(Http::CONTENT_ENCODING) != metaData_.end()) {
81 return metaData_.at(Http::CONTENT_ENCODING);
82 }
83 return gEmpty;
84 }
85
CacheControl() const86 const std::string &ObjectMetaData::CacheControl() const
87 {
88 if (metaData_.find(Http::CACHE_CONTROL) != metaData_.end()) {
89 return metaData_.at(Http::CACHE_CONTROL);
90 }
91 return gEmpty;
92 }
93
ContentDisposition() const94 const std::string &ObjectMetaData::ContentDisposition() const
95 {
96 if (metaData_.find(Http::CONTENT_DISPOSITION) != metaData_.end()) {
97 return metaData_.at(Http::CONTENT_DISPOSITION);
98 }
99 return gEmpty;
100 }
101
ETag() const102 const std::string &ObjectMetaData::ETag() const
103 {
104 if (metaData_.find(Http::ETAG) != metaData_.end()) {
105 return metaData_.at(Http::ETAG);
106 }
107 return gEmpty;
108 }
109
ContentMd5() const110 const std::string &ObjectMetaData::ContentMd5() const
111 {
112 if (metaData_.find(Http::CONTENT_MD5) != metaData_.end()) {
113 return metaData_.at(Http::CONTENT_MD5);
114 }
115 return gEmpty;
116 }
117
CRC64() const118 uint64_t ObjectMetaData::CRC64() const
119 {
120 if (metaData_.find("x-oss-hash-crc64ecma") != metaData_.end()) {
121 return std::strtoull(metaData_.at("x-oss-hash-crc64ecma").c_str(), nullptr, 10);
122 }
123 return 0ULL;
124 }
125
ObjectType() const126 const std::string &ObjectMetaData::ObjectType() const
127 {
128 if (metaData_.find("x-oss-object-type") != metaData_.end()) {
129 return metaData_.at("x-oss-object-type");
130 }
131 return gEmpty;
132 }
133
VersionId() const134 const std::string& ObjectMetaData::VersionId() const
135 {
136 if (metaData_.find("x-oss-version-id") != metaData_.end()) {
137 return metaData_.at("x-oss-version-id");
138 }
139 return gEmpty;
140 }
141
setExpirationTime(const std::string & value)142 void ObjectMetaData::setExpirationTime(const std::string &value)
143 {
144 metaData_[Http::EXPIRES] = value;
145 }
146
setContentLength(int64_t value)147 void ObjectMetaData::setContentLength(int64_t value)
148 {
149 metaData_[Http::CONTENT_LENGTH] = std::to_string(value);
150 }
151
setContentType(const std::string & value)152 void ObjectMetaData::setContentType(const std::string &value)
153 {
154 metaData_[Http::CONTENT_TYPE] = value;
155 }
156
setContentEncoding(const std::string & value)157 void ObjectMetaData::setContentEncoding(const std::string &value)
158 {
159 metaData_[Http::CONTENT_ENCODING] = value;
160 }
161
setCacheControl(const std::string & value)162 void ObjectMetaData::setCacheControl(const std::string &value)
163 {
164 metaData_[Http::CACHE_CONTROL] = value;
165 }
166
setContentDisposition(const std::string & value)167 void ObjectMetaData::setContentDisposition(const std::string &value)
168 {
169 metaData_[Http::CONTENT_DISPOSITION] = value;
170 }
171
setETag(const std::string & value)172 void ObjectMetaData::setETag(const std::string &value)
173 {
174 metaData_[Http::ETAG] = value;
175 }
176
setContentMd5(const std::string & value)177 void ObjectMetaData::setContentMd5(const std::string &value)
178 {
179 metaData_[Http::CONTENT_MD5] = value;
180 }
181
setCrc64(uint64_t value)182 void ObjectMetaData::setCrc64(uint64_t value)
183 {
184 metaData_["x-oss-hash-crc64ecma"] = std::to_string(value);
185 }
186
addHeader(const std::string & key,const std::string & value)187 void ObjectMetaData::addHeader(const std::string &key, const std::string &value)
188 {
189 metaData_[key] = value;
190 }
191
hasHeader(const std::string & key) const192 bool ObjectMetaData::hasHeader(const std::string& key) const
193 {
194 return (metaData_.find(key) != metaData_.end());
195 }
196
removeHeader(const std::string & key)197 void ObjectMetaData::removeHeader(const std::string& key)
198 {
199 if (metaData_.find(key) != metaData_.end()) {
200 metaData_.erase(key);
201 }
202 }
203
HttpMetaData()204 MetaData &ObjectMetaData::HttpMetaData()
205 {
206 return metaData_;
207 }
208
HttpMetaData() const209 const MetaData &ObjectMetaData::HttpMetaData() const
210 {
211 return metaData_;
212 }
213
addUserHeader(const std::string & key,const std::string & value)214 void ObjectMetaData::addUserHeader(const std::string &key, const std::string &value)
215 {
216 userMetaData_[key] = value;
217 }
218
hasUserHeader(const std::string & key) const219 bool ObjectMetaData::hasUserHeader(const std::string& key) const
220 {
221 return (userMetaData_.find(key) != userMetaData_.end());
222 }
223
removeUserHeader(const std::string & key)224 void ObjectMetaData::removeUserHeader(const std::string& key)
225 {
226 if (userMetaData_.find(key) != userMetaData_.end()) {
227 userMetaData_.erase(key);
228 }
229 }
230
UserMetaData()231 MetaData &ObjectMetaData::UserMetaData()
232 {
233 return userMetaData_;
234 }
235
UserMetaData() const236 const MetaData &ObjectMetaData::UserMetaData() const
237 {
238 return userMetaData_;
239 }
240
toHeaderCollection() const241 HeaderCollection ObjectMetaData::toHeaderCollection() const
242 {
243 HeaderCollection headers;
244 for (auto const&header : metaData_) {
245 headers[header.first] = header.second;
246 }
247
248 for (auto const&header : userMetaData_) {
249 std::string key("x-oss-meta-");
250 key.append(header.first);
251 headers[key] = header.second;
252 }
253 return headers;
254 }
255