forked from docs/doc-exports
Reviewed-by: gtema <artem.goncharov@gmail.com> Co-authored-by: Jawei, Li <lijiawei5@huawei.com> Co-committed-by: Jawei, Li <lijiawei5@huawei.com>
300 lines
23 KiB
HTML
300 lines
23 KiB
HTML
<a name="obs_04_0015"></a><a name="obs_04_0015"></a>
|
|
|
|
<h1 class="topictitle1">Creating a Bucket</h1>
|
|
<div id="body1559726121440"><div class="section" id="obs_04_0015__section126181353433"><h4 class="sectiontitle">Scenarios</h4><p id="obs_04_0015__p59641857134311">A bucket is a container that stores objects in OBS. You need to create a bucket before storing data in OBS.</p>
|
|
<p id="obs_04_0015__p5763438124519">The following describes how to call the API for <a href="obs_04_0021.html">creating a bucket</a> in a specified region. For details about how to call an API, see <a href="obs_04_0006.html">Calling APIs</a>.</p>
|
|
</div>
|
|
<div class="section" id="obs_04_0015__section144871505442"><h4 class="sectiontitle">Prerequisites</h4><ul id="obs_04_0015__ul4275112310556"><li id="obs_04_0015__li2275123195510">You have obtained the AK and SK. For details about how to obtain the AK and SK, see <a href="obs_04_0116.html">Obtaining Access Keys (AK/SK)</a>.</li><li id="obs_04_0015__li195641930195510">You have planned the region where you want to create a bucket and obtained the endpoint required for API calls. For details, see <a href="https://docs.otc.t-systems.com/en-us/endpoint/index.html" target="_blank" rel="noopener noreferrer">Regions and Endpoints</a>.</li></ul>
|
|
<p id="obs_04_0015__p15512120488">Once a region is determined, it cannot be modified after the bucket is created.</p>
|
|
</div>
|
|
<div class="section" id="obs_04_0015__section1485417616444"><h4 class="sectiontitle">Creating a Bucket Named <strong id="obs_04_0015__b2061753419454">bucket001</strong> in the a1 Region</h4><div class="p" id="obs_04_0015__p1419101418391">In this example, an Apache HttpClient is used.<div class="codecoloring" codetype="Java" id="obs_04_0015__screen79896109446"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10
|
|
11
|
|
12
|
|
13
|
|
14
|
|
15
|
|
16
|
|
17
|
|
18
|
|
19
|
|
20
|
|
21
|
|
22
|
|
23
|
|
24
|
|
25
|
|
26
|
|
27
|
|
28
|
|
29
|
|
30
|
|
31
|
|
32
|
|
33
|
|
34
|
|
35
|
|
36
|
|
37
|
|
38
|
|
39
|
|
40
|
|
41
|
|
42
|
|
43
|
|
44
|
|
45
|
|
46
|
|
47
|
|
48
|
|
49
|
|
50
|
|
51
|
|
52
|
|
53
|
|
54
|
|
55
|
|
56
|
|
57
|
|
58
|
|
59
|
|
60
|
|
61
|
|
62
|
|
63
|
|
64
|
|
65
|
|
66
|
|
67
|
|
68
|
|
69
|
|
70
|
|
71
|
|
72
|
|
73
|
|
74
|
|
75
|
|
76
|
|
77
|
|
78
|
|
79
|
|
80
|
|
81
|
|
82
|
|
83
|
|
84
|
|
85
|
|
86
|
|
87
|
|
88
|
|
89
|
|
90
|
|
91
|
|
92
|
|
93
|
|
94
|
|
95
|
|
96
|
|
97
|
|
98</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="kn">package</span> <span class="nn">com.obsclient</span><span class="p">;</span>
|
|
|
|
<span class="kn">import</span> <span class="nn">java.io.*</span><span class="p">;</span>
|
|
|
|
<span class="kn">import</span> <span class="nn">org.apache.http.Header</span><span class="p">;</span>
|
|
<span class="kn">import</span> <span class="nn">org.apache.http.client.methods.CloseableHttpResponse</span><span class="p">;</span>
|
|
<span class="kn">import</span> <span class="nn">org.apache.http.client.methods.HttpPut</span><span class="p">;</span>
|
|
<span class="kn">import</span> <span class="nn">org.apache.http.entity.StringEntity</span><span class="p">;</span>
|
|
<span class="kn">import</span> <span class="nn">org.apache.http.impl.client.CloseableHttpClient</span><span class="p">;</span>
|
|
<span class="kn">import</span> <span class="nn">org.apache.http.impl.client.HttpClients</span><span class="p">;</span>
|
|
|
|
<span class="kd">public</span> <span class="kd">class</span> <span class="nc">TestMain</span> <span class="p">{</span>
|
|
|
|
<span class="kd">public</span> <span class="kd">static</span> <span class="n">String</span> <span class="n">accessKey</span> <span class="o">=</span> <span class="s">"UDSIAMSTUBTEST000012"</span><span class="p">;</span> <span class="c1">//The value of this parameter is the AK obtained.</span>
|
|
<span class="kd">public</span> <span class="kd">static</span> <span class="n">String</span> <span class="n">securityKey</span> <span class="o">=</span> <span class="s">"Udsiamstubtest000000UDSIAMSTUBTEST000012"</span><span class="p">;</span> <span class="c1">//The value of this parameter is the SK obtained.</span>
|
|
<span class="kd">public</span> <span class="kd">static</span> <span class="n">String</span> <span class="n">region</span> <span class="o">=</span> <span class="s">"a1"</span><span class="p">;</span> <span class="c1">// The value is the region where the planned bucket resides.</span>
|
|
<span class="kd">public</span> <span class="kd">static</span> <span class="n">String</span> <span class="n">createBucketTemplate</span> <span class="o">=</span>
|
|
<span class="s">"<CreateBucketConfiguration "</span> <span class="o">+</span>
|
|
<span class="s">"xmlns=\"http://obs.a1.example.com/doc/2015-06-30/\">\n"</span> <span class="o">+</span>
|
|
<span class="s">"<Location>"</span> <span class="o">+</span> <span class="n">region</span> <span class="o">+</span> <span class="s">"</Location>\n"</span> <span class="o">+</span>
|
|
<span class="s">"</CreateBucketConfiguration>"</span><span class="p">;</span>
|
|
|
|
<span class="kd">public</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span> <span class="n">str</span><span class="p">)</span> <span class="p">{</span>
|
|
|
|
<span class="n">createBucket</span><span class="p">();</span>
|
|
|
|
<span class="p">}</span>
|
|
|
|
<span class="kd">private</span> <span class="kd">static</span> <span class="kt">void</span> <span class="nf">createBucket</span><span class="p">()</span> <span class="p">{</span>
|
|
<span class="n">CloseableHttpClient</span> <span class="n">httpClient</span> <span class="o">=</span> <span class="n">HttpClients</span><span class="p">.</span><span class="na">createDefault</span><span class="p">();</span>
|
|
<span class="n">String</span> <span class="n">requesttime</span> <span class="o">=</span> <span class="n">DateUtils</span><span class="p">.</span><span class="na">formatDate</span><span class="p">(</span><span class="n">System</span><span class="p">.</span><span class="na">currentTimeMillis</span><span class="p">());</span>
|
|
<span class="n">String</span> <span class="n">contentType</span> <span class="o">=</span> <span class="s">"application/xml"</span><span class="p">;</span>
|
|
|
|
|
|
<span class="n">HttpPut</span> <span class="n">httpPut</span> <span class="o">=</span> <span class="k">new</span> <span class="n">HttpPut</span><span class="p">(</span><span class="s">"http://bucket001.obs.a1.example.com"</span><span class="p">);</span>
|
|
<span class="n">httpPut</span><span class="p">.</span><span class="na">addHeader</span><span class="p">(</span><span class="s">"Date"</span><span class="p">,</span> <span class="n">requesttime</span><span class="p">);</span>
|
|
<span class="n">httpPut</span><span class="p">.</span><span class="na">addHeader</span><span class="p">(</span><span class="s">"Content-Type"</span><span class="p">,</span> <span class="n">contentType</span><span class="p">);</span>
|
|
|
|
<span class="cm">/**Calculate the signature based on the request.**/</span>
|
|
<span class="n">String</span> <span class="n">contentMD5</span> <span class="o">=</span> <span class="s">""</span><span class="p">;</span>
|
|
<span class="n">String</span> <span class="n">canonicalizedHeaders</span> <span class="o">=</span> <span class="s">""</span><span class="p">;</span>
|
|
<span class="n">String</span> <span class="n">canonicalizedResource</span> <span class="o">=</span> <span class="s">"/bucket001/"</span><span class="p">;</span>
|
|
<span class="c1">// Content-MD5 and Content-Type fields do not contain line breaks. The data format is RFC 1123, which is the same as the time in the request.</span>
|
|
<span class="n">String</span> <span class="n">canonicalString</span> <span class="o">=</span> <span class="s">"PUT"</span> <span class="o">+</span> <span class="s">"\n"</span> <span class="o">+</span> <span class="n">contentMD5</span> <span class="o">+</span> <span class="s">"\n"</span> <span class="o">+</span> <span class="n">contentType</span> <span class="o">+</span> <span class="s">"\n"</span> <span class="o">+</span> <span class="n">requesttime</span> <span class="o">+</span> <span class="s">"\n"</span> <span class="o">+</span> <span class="n">canonicalizedHeaders</span> <span class="o">+</span> <span class="n">canonicalizedResource</span><span class="p">;</span>
|
|
<span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"StringToSign:["</span> <span class="o">+</span> <span class="n">canonicalString</span> <span class="o">+</span> <span class="s">"]"</span><span class="p">);</span>
|
|
<span class="n">String</span> <span class="n">signature</span> <span class="o">=</span> <span class="kc">null</span><span class="p">;</span>
|
|
<span class="n">CloseableHttpResponse</span> <span class="n">httpResponse</span> <span class="o">=</span> <span class="kc">null</span><span class="p">;</span>
|
|
<span class="k">try</span> <span class="p">{</span>
|
|
<span class="n">signature</span> <span class="o">=</span> <span class="n">Signature</span><span class="p">.</span><span class="na">signWithHmacSha1</span><span class="p">(</span><span class="n">securityKey</span><span class="p">,</span> <span class="n">canonicalString</span><span class="p">);</span>
|
|
|
|
<span class="c1">// Added the Authorization: OBS AccessKeyID:signature field to the header.</span>
|
|
<span class="n">httpPut</span><span class="p">.</span><span class="na">addHeader</span><span class="p">(</span><span class="s">"Authorization"</span><span class="p">,</span> <span class="s">"OBS "</span> <span class="o">+</span> <span class="n">accessKey</span> <span class="o">+</span> <span class="s">":"</span> <span class="o">+</span> <span class="n">signature</span><span class="p">);</span>
|
|
|
|
<span class="c1">// Add a body.</span>
|
|
<span class="n">httpPut</span><span class="p">.</span><span class="na">setEntity</span><span class="p">(</span><span class="k">new</span> <span class="n">StringEntity</span><span class="p">(</span><span class="n">createBucketTemplate</span><span class="p">));</span>
|
|
|
|
<span class="n">httpResponse</span> <span class="o">=</span> <span class="n">httpClient</span><span class="p">.</span><span class="na">execute</span><span class="p">(</span><span class="n">httpPut</span><span class="p">);</span>
|
|
|
|
<span class="c1">// Prints the sending request information and the received response message.</span>
|
|
<span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Request Message:"</span><span class="p">);</span>
|
|
<span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">httpPut</span><span class="p">.</span><span class="na">getRequestLine</span><span class="p">());</span>
|
|
<span class="k">for</span> <span class="p">(</span><span class="n">Header</span> <span class="n">header</span> <span class="p">:</span> <span class="n">httpPut</span><span class="p">.</span><span class="na">getAllHeaders</span><span class="p">())</span> <span class="p">{</span>
|
|
<span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">header</span><span class="p">.</span><span class="na">getName</span><span class="p">()</span> <span class="o">+</span> <span class="s">":"</span> <span class="o">+</span> <span class="n">header</span><span class="p">.</span><span class="na">getValue</span><span class="p">());</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Response Message:"</span><span class="p">);</span>
|
|
<span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">httpResponse</span><span class="p">.</span><span class="na">getStatusLine</span><span class="p">());</span>
|
|
<span class="k">for</span> <span class="p">(</span><span class="n">Header</span> <span class="n">header</span> <span class="p">:</span> <span class="n">httpResponse</span><span class="p">.</span><span class="na">getAllHeaders</span><span class="p">())</span> <span class="p">{</span>
|
|
<span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">header</span><span class="p">.</span><span class="na">getName</span><span class="p">()</span> <span class="o">+</span> <span class="s">":"</span> <span class="o">+</span> <span class="n">header</span><span class="p">.</span><span class="na">getValue</span><span class="p">());</span>
|
|
<span class="p">}</span>
|
|
<span class="n">BufferedReader</span> <span class="n">reader</span> <span class="o">=</span> <span class="k">new</span> <span class="n">BufferedReader</span><span class="p">(</span><span class="k">new</span> <span class="n">InputStreamReader</span><span class="p">(</span>
|
|
<span class="n">httpResponse</span><span class="p">.</span><span class="na">getEntity</span><span class="p">().</span><span class="na">getContent</span><span class="p">()));</span>
|
|
|
|
<span class="n">String</span> <span class="n">inputLine</span><span class="p">;</span>
|
|
<span class="n">StringBuffer</span> <span class="n">response</span> <span class="o">=</span> <span class="k">new</span> <span class="n">StringBuffer</span><span class="p">();</span>
|
|
|
|
<span class="k">while</span> <span class="p">((</span><span class="n">inputLine</span> <span class="o">=</span> <span class="n">reader</span><span class="p">.</span><span class="na">readLine</span><span class="p">())</span> <span class="o">!=</span> <span class="kc">null</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="n">response</span><span class="p">.</span><span class="na">append</span><span class="p">(</span><span class="n">inputLine</span><span class="p">);</span>
|
|
<span class="p">}</span>
|
|
<span class="n">reader</span><span class="p">.</span><span class="na">close</span><span class="p">();</span>
|
|
|
|
<span class="c1">// print result</span>
|
|
<span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">response</span><span class="p">.</span><span class="na">toString</span><span class="p">());</span>
|
|
<span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="n">UnsupportedEncodingException</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="n">e</span><span class="p">.</span><span class="na">printStackTrace</span><span class="p">();</span>
|
|
<span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="n">IOException</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="n">e</span><span class="p">.</span><span class="na">printStackTrace</span><span class="p">();</span>
|
|
<span class="p">}</span> <span class="k">finally</span> <span class="p">{</span>
|
|
<span class="k">try</span> <span class="p">{</span>
|
|
<span class="n">httpClient</span><span class="p">.</span><span class="na">close</span><span class="p">();</span>
|
|
<span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="n">IOException</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="n">e</span><span class="p">.</span><span class="na">printStackTrace</span><span class="p">();</span>
|
|
<span class="p">}</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="p">}</span>
|
|
|
|
<span class="p">}</span>
|
|
</pre></div>
|
|
</td></tr></table></div>
|
|
</div>
|
|
<p id="obs_04_0015__p197871232315"></p>
|
|
<p id="obs_04_0015__p224061622114">The format of the <strong id="obs_04_0015__b1891405715232">Date</strong> header field <strong id="obs_04_0015__b193682172411">DateUtils</strong> is as follows:</p>
|
|
<div class="codecoloring" codetype="Java" id="obs_04_0015__screen56562831219"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10
|
|
11
|
|
12
|
|
13
|
|
14
|
|
15
|
|
16</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="kn">package</span> <span class="nn">com.obsclient</span><span class="p">;</span>
|
|
|
|
<span class="kn">import</span> <span class="nn">java.text.DateFormat</span><span class="p">;</span>
|
|
<span class="kn">import</span> <span class="nn">java.text.SimpleDateFormat</span><span class="p">;</span>
|
|
<span class="kn">import</span> <span class="nn">java.util.Locale</span><span class="p">;</span>
|
|
<span class="kn">import</span> <span class="nn">java.util.TimeZone</span><span class="p">;</span>
|
|
|
|
<span class="kd">public</span> <span class="kd">class</span> <span class="nc">DateUtils</span> <span class="p">{</span>
|
|
|
|
<span class="kd">public</span> <span class="kd">static</span> <span class="n">String</span> <span class="nf">formatDate</span><span class="p">(</span><span class="kt">long</span> <span class="n">time</span><span class="p">)</span>
|
|
<span class="p">{</span>
|
|
<span class="n">DateFormat</span> <span class="n">serverDateFormat</span> <span class="o">=</span> <span class="k">new</span> <span class="n">SimpleDateFormat</span><span class="p">(</span><span class="s">"EEE, dd MMM yyyy HH:mm:ss z"</span><span class="p">,</span> <span class="n">Locale</span><span class="p">.</span><span class="na">ENGLISH</span><span class="p">);</span>
|
|
<span class="n">serverDateFormat</span><span class="p">.</span><span class="na">setTimeZone</span><span class="p">(</span><span class="n">TimeZone</span><span class="p">.</span><span class="na">getTimeZone</span><span class="p">(</span><span class="s">"GMT"</span><span class="p">));</span>
|
|
<span class="k">return</span> <span class="n">serverDateFormat</span><span class="p">.</span><span class="na">format</span><span class="p">(</span><span class="n">time</span><span class="p">);</span>
|
|
<span class="p">}</span>
|
|
<span class="p">}</span>
|
|
</pre></div>
|
|
</td></tr></table></div>
|
|
<p id="obs_04_0015__p1984165715225"></p>
|
|
<p id="obs_04_0015__p9369844231">The method of calculating the signature character string is as follows:</p>
|
|
<div class="codecoloring" codetype="Java" id="obs_04_0015__screen2693143313131"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
6
|
|
7
|
|
8
|
|
9
|
|
10
|
|
11
|
|
12
|
|
13
|
|
14
|
|
15
|
|
16
|
|
17
|
|
18
|
|
19
|
|
20
|
|
21
|
|
22
|
|
23</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="kn">package</span> <span class="nn">com.obsclient</span><span class="p">;</span>
|
|
|
|
<span class="kn">import</span> <span class="nn">javax.crypto.Mac</span><span class="p">;</span>
|
|
<span class="kn">import</span> <span class="nn">javax.crypto.spec.SecretKeySpec</span><span class="p">;</span>
|
|
<span class="kn">import</span> <span class="nn">java.io.UnsupportedEncodingException</span><span class="p">;</span>
|
|
<span class="kn">import</span> <span class="nn">java.security.NoSuchAlgorithmException</span><span class="p">;</span>
|
|
<span class="kn">import</span> <span class="nn">java.security.InvalidKeyException</span><span class="p">;</span>
|
|
<span class="kn">import</span> <span class="nn">java.util.Base64</span><span class="p">;</span>
|
|
|
|
<span class="kd">public</span> <span class="kd">class</span> <span class="nc">Signature</span> <span class="p">{</span>
|
|
<span class="kd">public</span> <span class="kd">static</span> <span class="n">String</span> <span class="nf">signWithHmacSha1</span><span class="p">(</span><span class="n">String</span> <span class="n">sk</span><span class="p">,</span> <span class="n">String</span> <span class="n">canonicalString</span><span class="p">)</span> <span class="kd">throws</span> <span class="n">UnsupportedEncodingException</span> <span class="p">{</span>
|
|
|
|
<span class="k">try</span> <span class="p">{</span>
|
|
<span class="n">SecretKeySpec</span> <span class="n">signingKey</span> <span class="o">=</span> <span class="k">new</span> <span class="n">SecretKeySpec</span><span class="p">(</span><span class="n">sk</span><span class="p">.</span><span class="na">getBytes</span><span class="p">(</span><span class="s">"UTF-8"</span><span class="p">),</span> <span class="s">"HmacSHA1"</span><span class="p">);</span>
|
|
<span class="n">Mac</span> <span class="n">mac</span> <span class="o">=</span> <span class="n">Mac</span><span class="p">.</span><span class="na">getInstance</span><span class="p">(</span><span class="s">"HmacSHA1"</span><span class="p">);</span>
|
|
<span class="n">mac</span><span class="p">.</span><span class="na">init</span><span class="p">(</span><span class="n">signingKey</span><span class="p">);</span>
|
|
<span class="k">return</span> <span class="n">Base64</span><span class="p">.</span><span class="na">getEncoder</span><span class="p">().</span><span class="na">encodeToString</span><span class="p">(</span><span class="n">mac</span><span class="p">.</span><span class="na">doFinal</span><span class="p">(</span><span class="n">canonicalString</span><span class="p">.</span><span class="na">getBytes</span><span class="p">(</span><span class="s">"UTF-8"</span><span class="p">)));</span>
|
|
<span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="n">NoSuchAlgorithmException</span> <span class="o">|</span> <span class="n">InvalidKeyException</span> <span class="o">|</span> <span class="n">UnsupportedEncodingException</span> <span class="n">e</span><span class="p">)</span> <span class="p">{</span>
|
|
<span class="n">e</span><span class="p">.</span><span class="na">printStackTrace</span><span class="p">();</span>
|
|
<span class="p">}</span>
|
|
<span class="k">return</span> <span class="kc">null</span><span class="p">;</span>
|
|
<span class="p">}</span>
|
|
<span class="p">}</span>
|
|
</pre></div>
|
|
</td></tr></table></div>
|
|
</div>
|
|
</div>
|
|
<div>
|
|
<div class="familylinks">
|
|
<div class="parentlink"><strong>Parent topic:</strong> <a href="obs_04_0014.html">Getting Started</a></div>
|
|
</div>
|
|
</div>
|
|
|