edit-icon download-icon

オブジェクトの管理

最終更新日: Nov 07, 2017

バケットには多くのオブジェクトが含まれていることができます。SDK には、オブジェクトを便利に管理するための一連のインターフェイスが用意されています。

全オブジェクトの確認

次のコードでは、’list’ を使用して、現在のバケット内のすべてのオブジェクトをリストします。 主なパラメーターは次のとおりです。

  • Prefix:特定の接頭辞を持つオブジェクトのみを表示するように指定

  • Marker:名前が指定したマーカーよりも大きいオブジェクトをリストすることを指定

  • Delimiter:オブジェクトグループの共通接頭辞を取得

  • Max-keys:返されるオブジェクトの最大数を指定

  1. var co = require('co');
  2. var OSS = require('ali-oss');
  3. var client = new OSS({
  4. region: '<Your region>',
  5. accessKeyId: '<Your AccessKeyId>',
  6. accessKeySecret: '<Your AccessKeySecret>',
  7. bucket: 'Your bucket name'
  8. });
  9. co(function* () {
  10. // パラメーター指定しない場合、デフォルトでは、最大 1,000 のオブジェクトが返される
  11. var result = yield client.list();
  12. console.log(result);
  13. // nextMarker に基づいてオブジェクトをリストする
  14. if (result.isTruncated) {
  15. var result = yield client.list({
  16. marker: result.nextMarker
  17. });
  18. }
  19. // 名前に "my-" 接頭辞が含まれるすべてのオブジェクトをリストする
  20. var result = yield client.list({
  21. prefix: 'my-'
  22. });
  23. console.log(result);
  24. // 名前が "my-object" マーカーより大きく、"my-" 接頭辞を含むすべてのオブジェクトをリストする
  25. var result = yield client.list({
  26. prefix: 'my-',
  27. marker: 'my-object'
  28. });
  29. console.log(result);
  30. }).catch(function (err) {
  31. console.log(err);
  32. });

ディレクトリ構造のシミュレート

OSS はオブジェクトベースのストレージサービスです。ディレクトリはありません。バケットに格納されたすべてのオブジェクトは、オブジェクトのキーによって一意に識別されますので、オブジェクトの間に階層構造は存在しません。このような構造により、OSS はオブジェクトを効率的に格納することができます。

ただし、別タイプのオブジェクトを別の “ディレクトリ” の下に置いて、従来の方法でオブジェクトを管理することができます。OSS は、シミュレートされたディレクトリ構造を作成するための “Public Prefix” 機能を提供します。 “Public Prefix” の詳細については、オブジェクトの一覧表示 を参照してください。

仮にバケットに次のオブジェクトが含まれています。

  1. foo/x
  2. foo/y
  3. foo/bar/a
  4. foo/bar/b
  5. foo/hello/C/1
  6. foo/hello/C/2
  7. ...
  8. foo/hello/C/9999

‘listDir’ 関数を使用して、指定されたディレクトリの下にあるすべてのオブジェクトとサブディレクトリをリストします。

  1. var co = require('co');
  2. var OSS = require('ali-oss');
  3. var client = new OSS({
  4. region: '<Your region>',
  5. accessKeyId: '<Your AccessKeyId>',
  6. accessKeySecret: '<Your AccessKeySecret>',
  7. bucket: 'Your bucket name'
  8. });
  9. function* listDir(dir)
  10. var result = yield client.list({
  11. prefix: dir,
  12. delimiter: '/'
  13. });
  14. result.prefixes.forEach(function (subDir) {
  15. console.log('SubDir: %s', subDir);
  16. });
  17. result.objects.forEach(function (obj) {
  18. console.log(Object: %s', obj.name);
  19. });
  20. end

実行結果は下記となります。

  1. > yield listDir('foo/')
  2. => SubDir: foo/bar/
  3. SubDir: foo/hello/
  4. Object: foo/x
  5. Object: foo/y
  6. > yield listDir('foo/bar/')
  7. => Object: foo/bar/a
  8. Object: foo/bar/b
  9. > yield listDir('foo/hello/C/')
  10. => Object: foo/hello/C/1
  11. Object: foo/hello/C/2
  12. ...
  13. Object: foo/hello/C/9999

オブジェクトメタデータ

OSS にオブジェクトをアップロードするときは、オブジェクトの内容を除き、オブジェクトの特定の属性情報を指定できます。属性情報はメタデータと呼ばれます。

メタデータは、アップロード中にオブジェクトとともに格納され、ダウンロード中にオブジェクトとともに返されます。

オブジェクトのメタデータは、オブジェクトのアップロード/ダウンロード時に HTTP ヘッダーに格納されるため、メタデータは HTTP に従って複雑な文字を含めることはできません。つまり、メタデータには、単純な印刷可能な ASCII 文字のみを含め、改行を含めることはできません。すべてのメタデータズは 8KB を超えることはできません。

‘put’、’putStream’、’multipartUpload’ の使用時に ‘meta’ パラメーターを指定することで、オブジェクトメタデータを指定することができます:

  1. var co = require('co');
  2. var OSS = require('ali-oss')
  3. var client = new OSS({
  4. region: '<Your region>',
  5. accessKeyId: '<Your AccessKeyId>',
  6. accessKeySecret: '<Your AccessKeySecret>',
  7. bucket: 'Your bucket name'
  8. });
  9. co(function* () {
  10. var result = yield client.put('object-key', 'local-file', {
  11. meta: {
  12. year: 2016,
  13. people: 'mary'
  14. }
  15. });
  16. console.log(result);
  17. }).catch(function (err) {
  18. console.log(err);
  19. });

‘putMeta’ インターフェースを使用して、オブジェクトメタデータを更新します。

  1. var co = require('co');
  2. var OSS = require('ali-oss')
  3. var client = new OSS({
  4. region: '<Your region>',
  5. accessKeyId: '<Your AccessKeyId>',
  6. accessKeySecret: '<Your AccessKeySecret>',
  7. bucket: 'Your bucket name'
  8. });
  9. co(function* () {
  10. var result = yield client.putMeta('object-key', {
  11. meta: {
  12. year: 2015,
  13. people: 'mary'
  14. }
  15. });
  16. console.log(result);
  17. }).catch(function (err) {
  18. console.log(err);
  19. });

オブジェクトのコピー

‘copy’ を使用してオブジェクトをコピーします。 コピーは、次の 2 種類のシナリオがあります。

  • 同じバケット内。
  • 同じリージョン内の 2 つ異なるバケット。この場合、ソースオブジェクト名は ‘/bucket/object’ の形式にする必要があります。

さらに、オブジェクトをコピーするとき、オブジェクトのメタデータを処理する 2 つの方法があります。

  • ‘meta’ パラメーターが指定されていない場合、メタデータはソースオブジェクトのメタデータと同じです。つまり、ソースオブジェクトのメタデータをコピーします。

  • ‘meta’ パラメーターが指定されている場合、ソースオブジェクト情報を新しいメタデータで上書きします。

  1. var co = require('co');
  2. var OSS = require('ali-oss')
  3. var client = new OSS({
  4. region: '<Your region>',
  5. accessKeyId: '<Your AccessKeyId>',
  6. accessKeySecret: '<Your AccessKeySecret>',
  7. bucket: 'Your bucket name'
  8. });
  9. co(function* () {
  10. // 2 つのバケット間のコピー
  11. var result = yield client.copy('to', '/from-bucket/from');
  12. console.log(result);
  13. // メタデータのコピー
  14. var result = yield client.copy('to', 'from');
  15. console.log(result);
  16. // メタデータの上書き
  17. var result = yield client.copy('to', 'from', {
  18. meta: {
  19. year: 2015,
  20. people: 'mary'
  21. }
  22. });
  23. console.log(result);
  24. }).catch(function (err) {
  25. console.log(err);
  26. });

オブジェクトの削除

‘delete’ を使用して、オブジェクトを削除します。

  1. var co = require('co');
  2. var OSS = require('ali-oss')
  3. var client = new OSS({
  4. region: '<Your region>',
  5. accessKeyId: '<Your AccessKeyId>',
  6. accessKeySecret: '<Your AccessKeySecret>',
  7. bucket: 'Your bucket name'
  8. });
  9. co(function* () {
  10. var result = yield client.delete('object-key');
  11. console.log(result);
  12. }).catch(function (err) {
  13. console.log(err);
  14. });

オブジェクトのバッチ削除

‘deleteMulti’ を使用して、オブジェクトをバッチ削除します。パラメーター ‘quiet’ を使用して、削除結果を返すかどうかを設定します。

  1. var co = require('co');
  2. var OSS = require('ali-oss')
  3. var client = new OSS({
  4. region: '<Your region>',
  5. accessKeyId: '<Your AccessKeyId>',
  6. accessKeySecret: '<Your AccessKeySecret>',
  7. bucket: 'Your bucket name'
  8. });
  9. co(function* () {
  10. var result = yield client.deleteMulti(['obj-1', 'obj-2', 'obj-3']);
  11. console.log(result);
  12. var result = yield client.deleteMulti(['obj-1', 'obj-2', 'obj-3'], {
  13. quiet: true
  14. });
  15. console.log(result);
  16. }).catch(function (err) {
  17. console.log(err);
  18. });