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/InitiateMultipartUploadRequest.h>
19 #include <alibabacloud/oss/http/HttpType.h>
20 #include "utils/Utils.h"
21 #include <sstream>
22 using namespace AlibabaCloud::OSS;
23 
InitiateMultipartUploadRequest(const std::string & bucket,const std::string & key)24 InitiateMultipartUploadRequest::InitiateMultipartUploadRequest(const std::string &bucket, const std::string &key) :
25     InitiateMultipartUploadRequest(bucket, key, ObjectMetaData())
26 {
27 }
28 
InitiateMultipartUploadRequest(const std::string & bucket,const std::string & key,const ObjectMetaData & metaData)29 InitiateMultipartUploadRequest::InitiateMultipartUploadRequest(const std::string &bucket, const std::string &key,
30                                                                const ObjectMetaData &metaData) :
31     OssObjectRequest(bucket, key),
32     metaData_(metaData),
33     encodingTypeIsSet_(false),
34     sequential_(false)
35 {
36 }
37 
setEncodingType(const std::string & encodingType)38 void InitiateMultipartUploadRequest::setEncodingType(const std::string &encodingType)
39 {
40     encodingType_ = encodingType;
41     encodingTypeIsSet_ = true;
42 }
43 
setCacheControl(const std::string & value)44 void InitiateMultipartUploadRequest::setCacheControl(const std::string &value)
45 {
46     metaData_.addHeader(Http::CACHE_CONTROL, value);
47 }
48 
setContentDisposition(const std::string & value)49 void InitiateMultipartUploadRequest::setContentDisposition(const std::string &value)
50 {
51     metaData_.addHeader(Http::CONTENT_DISPOSITION, value);
52 }
53 
setContentEncoding(const std::string & value)54 void InitiateMultipartUploadRequest::setContentEncoding(const std::string &value)
55 {
56     metaData_.addHeader(Http::CONTENT_ENCODING, value);
57 }
58 
setExpires(const std::string & value)59 void InitiateMultipartUploadRequest::setExpires(const std::string &value)
60 {
61     metaData_.addHeader(Http::EXPIRES, value);
62 }
63 
setTagging(const std::string & value)64 void InitiateMultipartUploadRequest::setTagging(const std::string& value)
65 {
66     metaData_.addHeader("x-oss-tagging", value);
67 }
68 
setSequential(bool value)69 void InitiateMultipartUploadRequest::setSequential(bool value)
70 {
71     sequential_ = value;
72 }
73 
MetaData()74 ObjectMetaData &InitiateMultipartUploadRequest::MetaData()
75 {
76     return metaData_;
77 }
78 
specialHeaders() const79 HeaderCollection InitiateMultipartUploadRequest::specialHeaders() const
80 {
81     auto headers = metaData_.toHeaderCollection();
82     if (headers.find(Http::CONTENT_TYPE) == headers.end()) {
83         headers[Http::CONTENT_TYPE] = LookupMimeType(Key());
84     }
85 
86     auto baseHeaders = OssObjectRequest::specialHeaders();
87     headers.insert(baseHeaders.begin(), baseHeaders.end());
88 
89     return headers;
90 }
91 
specialParameters() const92 ParameterCollection InitiateMultipartUploadRequest::specialParameters() const
93 {
94     ParameterCollection parameters;
95     parameters["uploads"] = "";
96     if (encodingTypeIsSet_) {
97         parameters["encoding-type"] = encodingType_;
98     }
99 
100     if (sequential_) {
101         parameters["sequential"] = "";
102     }
103     return parameters;
104 }
105