list-objects-sample.html 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. <!--
  2. * Copyright 2019 Huawei Technologies Co.,Ltd.
  3. * Licensed under the Apache License, Version 2.0 (the "License"); you may not use
  4. * this file except in compliance with the License. You may obtain a copy of the
  5. * License at
  6. *
  7. * http://www.apache.org/licenses/LICENSE-2.0
  8. *
  9. * Unless required by applicable law or agreed to in writing, software distributed
  10. * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
  11. * CONDITIONS OF ANY KIND, either express or implied. See the License for the
  12. * specific language governing permissions and limitations under the License.
  13. -->
  14. <!DOCTYPE html>
  15. <html lang="en">
  16. <head>
  17. <meta charset="utf-8">
  18. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  19. <meta http-equiv="Pragma" name="Pragma" content="no-cache">
  20. <title>list_objects_sample</title>
  21. </head>
  22. <body>
  23. <h3>OBS BrowserJS SDK demo</h3>
  24. <h4>Basic Configuration</h4>
  25. <label>AK:</label> <input type="text" value="*** Provide your Access Key ***" id="ak" size="30"/>
  26. <label>SK:</label> <input type="text" value="*** Provide your Secret Key ***" id="sk" size="30"/>
  27. <p>
  28. <label>Server:</label> <input type="text" value="http://your-endpoint" id="server" size="30"/>
  29. <label>Bucket:</label> <input type="text" value="bucketname" id="bucketname"/>
  30. <p>
  31. <input type="button" value="Click to list objects" onclick="listObjects();"/>
  32. <p>
  33. <input type="button" value="Click to list objects group by folder" onclick="listObjectsByFolder();"/>
  34. <p>
  35. <input type="button" value="Click to list objects in way of pagination" onclick="listObjectsByPage();"/>
  36. <p>
  37. <input type="button" value="Click to batch delete objects" onclick="deleteObjects();"/>
  38. </body>
  39. <script src="../dist/esdk-obs-browserjs.3.23.5.min.js"></script>
  40. <script type="text/javascript">
  41. /**
  42. *
  43. * This sample demonstrates how to list objects under specified bucket
  44. * from OBS using the OBS SDK for BrowserJS.
  45. *
  46. */
  47. function getObsClient(){
  48. /*
  49. * Initialize a obs client instance with your account for accessing OBS
  50. */
  51. var ak = document.getElementById('ak').value;
  52. var sk = document.getElementById('sk').value;
  53. var server = document.getElementById('server').value;
  54. return new ObsClient({
  55. access_key_id: ak,
  56. secret_access_key: sk,
  57. server : server,
  58. timeout : 60 * 5,
  59. });
  60. }
  61. var keys = [];
  62. var keyPrefix = 'MyObjectKey';
  63. var inited = false;
  64. /**
  65. * batch delete objects
  66. */
  67. function deleteObjects(){
  68. var bucketName = document.getElementById('bucketname').value;
  69. var obs = getObsClient();
  70. console.log('Deleting all objects\n');
  71. if(keys.length>0){
  72. obs.deleteObjects({
  73. Bucket: bucketName,
  74. Quiet:false,
  75. Objects: keys
  76. }).then(function(result) {
  77. inited = false;
  78. if(result.CommonMsg.Status < 300){
  79. console.log('Deleteds:');
  80. var i=0;
  81. for(;i<result.InterfaceResult.Deleteds.length;i++){
  82. console.log('Deleted[' + i + ']:');
  83. console.log('Key-->'+result.InterfaceResult.Deleteds[i]['Key']);
  84. console.log('VersionId-->' + result.InterfaceResult.Deleteds[i]['VersionId']);
  85. console.log('DeleteMarker-->' + result.InterfaceResult.Deleteds[i]['DeleteMarker']);
  86. console.log('DeleteMarkerVersionId-->' + result.InterfaceResult.Deleteds[i]['DeleteMarkerVersionId']);
  87. }
  88. console.log('\n');
  89. console.log('Errors:');
  90. i = 0;
  91. for(;i<result.InterfaceResult.Errors.length;i++){
  92. console.log('Error[' + i + ']:');
  93. console.log('Key-->' + result.InterfaceResult.Errors[i]['Key']);
  94. console.log('VersionId-->' + result.InterfaceResult.Errors[i]['VersionId']);
  95. console.log('Code-->' + result.InterfaceResult.Errors[i]['Code']);
  96. console.log('Message-->' + result.InterfaceResult.Errors[i]['Message']);
  97. }
  98. }
  99. keys = [];
  100. });
  101. }
  102. }
  103. function doInsert(obs, bucketName, callback){
  104. if(!inited){
  105. /*
  106. * First insert 100 objects for demo
  107. */
  108. var content = 'Hello OBS';
  109. var finishedCount = 0;
  110. var objectCount = 100;
  111. var i=0;
  112. for(;i<objectCount;i++){
  113. var key = keyPrefix + i;
  114. obs.putObject({
  115. Bucket : bucketName,
  116. Key : key,
  117. Body : content
  118. }).then((function(key){
  119. return function(result) {
  120. finishedCount++;
  121. if(result.CommonMsg.Status < 300){
  122. console.log('Succeed to put object' + key);
  123. keys.push({Key:key});
  124. }
  125. if(finishedCount === objectCount){
  126. console.log('\n');
  127. console.log('Put '+ keys.length + ' objects completed.');
  128. inited = true;
  129. callback();
  130. }
  131. };
  132. })(key));
  133. }
  134. }else{
  135. callback();
  136. }
  137. }
  138. /*
  139. * List the objects in way of pagination
  140. */
  141. function listObjectsByPage(){
  142. var bucketName = document.getElementById('bucketname').value;
  143. var obs = getObsClient();
  144. doInsert(obs, bucketName, function(){
  145. function listAll(nextMarker, pageSize, pageIndex){
  146. obs.listObjects({
  147. Bucket: bucketName,
  148. MaxKeys: pageSize,
  149. Marker:nextMarker
  150. }).then(function(result) {
  151. if(result.CommonMsg.Status < 300){
  152. console.log('Page:' + pageIndex + '\n');
  153. var j=0;
  154. for(;j<result.InterfaceResult.Contents.length;j++){
  155. console.log('\tKey-->' + result.InterfaceResult.Contents[j]['Key']);
  156. console.log('\tETag-->' + result.InterfaceResult.Contents[j]['ETag']);
  157. }
  158. console.log('\n');
  159. if(result.InterfaceResult.IsTruncated === 'true'){
  160. listAll(result.InterfaceResult.NextMarker, pageSize, pageIndex + 1);
  161. }
  162. }
  163. });
  164. }
  165. listAll(null, 20, 1)
  166. }
  167. );
  168. }
  169. /*
  170. * List objects using default parameters, will return up to 1000 objects
  171. */
  172. function listObjects(){
  173. var bucketName = document.getElementById('bucketname').value;
  174. var obs = getObsClient();
  175. doInsert(obs, bucketName, function(){
  176. obs.listObjects({
  177. Bucket: bucketName
  178. }).then(function(result) {
  179. if(result.CommonMsg.Status < 300){
  180. console.log('List objects using default parameters:\n');
  181. var j=0;
  182. for(;j<result.InterfaceResult.Contents.length;j++){
  183. console.log('\tKey-->' + result.InterfaceResult.Contents[j]['Key']);
  184. console.log('\tETag-->' + result.InterfaceResult.Contents[j]['ETag']);
  185. }
  186. console.log('\n');
  187. }
  188. });
  189. });
  190. }
  191. /*
  192. * List the objects group by folder
  193. */
  194. function listObjectsByFolder(){
  195. var bucketName = document.getElementById('bucketname').value;
  196. var obs = getObsClient();
  197. doInsert(obs, bucketName, function(){
  198. console.log('List objects group by folder');
  199. obs.listObjects({
  200. Bucket: bucketName,
  201. Delimiter: '/'
  202. }).then(function(result) {
  203. if(result.CommonMsg.Status < 300){
  204. console.log('Root path:');
  205. var j=0;
  206. for(;j<result.InterfaceResult.Contents.length;j++){
  207. console.log('\tKey-->' + result.InterfaceResult.Contents[j]['Key']);
  208. console.log('\tETag-->' + result.InterfaceResult.Contents[j]['ETag']);
  209. }
  210. console.log('\n');
  211. var listObjectsByPrefix = function(commonPrefixes){
  212. var i=0;
  213. for(;i<commonPrefixes.length;i++){
  214. obs.listObjects({
  215. Bucket: bucketName,
  216. Delimiter: '/',
  217. Prefix: commonPrefixes[i]['Prefix']
  218. }).then((function(i){
  219. return function(result){
  220. if(result.CommonMsg.Status < 300){
  221. console.log('Folder ' + commonPrefixes[i]['Prefix'] + ':');
  222. var j=0;
  223. for(;j<result.InterfaceResult.Contents.length;j++){
  224. console.log('\tKey-->' + result.InterfaceResult.Contents[j]['Key']);
  225. console.log('\tETag-->' + result.InterfaceResult.Contents[j]['ETag']);
  226. }
  227. console.log('\n');
  228. if(result.InterfaceResult.CommonPrefixes && result.InterfaceResult.CommonPrefixes.length > 0){
  229. listObjectsByPrefix(result.InterfaceResult.CommonPrefixes);
  230. }
  231. }
  232. };
  233. })(i));
  234. }
  235. };
  236. listObjectsByPrefix(result.InterfaceResult.CommonPrefixes);
  237. }
  238. });
  239. });
  240. }
  241. </script>
  242. </html>