最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

在Google云存储中获取设置元数据

IT培训 admin 13浏览 0评论

在Google云存储中获取/设置元数据

我正在尝试从Google Cloud Storage文件设置和检索元数据,但是我尝试的似乎不起作用。我的代码在Kubernetes节点中运行/我有这个:

// let's make sure that the source file is still there.
let sourceFile = storage.bucket(sourceFileObject.bucket).file( sourceFileObject.name );

const metadata = {
      MD_DL_ERROR: 1
};

console.log( `Setting metadata for ${sourceFileObject.name} to: `, metadata );

sourceFile.setMetadata(metadata, function(err, apiResponse) {

    console.log( `NOW GETTING METADATA for: ${sourceFileObject.name}` );

    sourceFile.getMetadata( function(err, metadata, apiResponse) {
        console.log( "got metadata: ", metadata );
    } );
});

但是当它运行时,日志中显示的内容完全没有表明元数据已设置:

 Setting metadata for CA-SACMLS/20022759_000.jpg to:  { MD_DL_ERROR: 1 }

 NOW GETTING METADATA for: CA-SACMLS/20022759_000.jpg
 got metadata:  { kind: 'storage#object',
   id:        'idx-photos-raw-gs.ihouseprd/CA-SACMLS/20022759_000.jpg/1588629892121256',
   selfLink:  'https://blah blah blah',
   mediaLink: 'https://blah blah blah',
   name: 'CA-SACMLS/20022759_000.jpg',
   bucket: 'idx-photos-raw-gs.ihouseprd',
   generation: '1588629892121256',
   metageneration: '2',
   contentType: 'image/jpg',
   storageClass: 'MULTI_REGIONAL',
   size: '124923',
   md5Hash: 'HASHVAL',
   crc32c: 'koOVMQ==',
   etag: 'CKiFmcObm+kCEAI=',
   timeCreated: '2020-05-04T22:04:52.120Z',
   updated: '2020-05-04T22:04:52.509Z',
   timeStorageClassUpdated: '2020-05-04T22:04:52.120Z' }

我想念什么?

回答如下:

[我认为这是由于延迟了文件元数据的修改(这两个请求被触发得太近且太快),因此我在代码中添加了一个sleep函数,看起来像预期的工作。

const {Storage} = require('@google-cloud/storage');
const storage = new Storage();
const myBucket = storage.bucket('fakebucket');

//sleep definition
const sleep = (waitTimeInMs) => new Promise(resolve => setTimeout(resolve, waitTimeInMs));

const sourceFileObject = myBucket.file('demo.zip');
const metadata = {
    metadata: {
        rrasd: 'custom',
        adsdasdasd: 'go here'
    }
};

sourceFileObject.setMetadata(metadata, function(err, apiResponse) {
    //wait for the propagation
    sleep(250).then(() => {
        sourceFileObject.getMetadata(function(err, metadata, apiResponse) {
            console.log("got metadata: ", metadata);
        })
    })
});
};

更新

我更改了代码以避免重新定义const metadata,并且看起来像预期的那样工作,由于我以前的代码可以工作,因此睡眠承诺不会共享元数据变量,感谢@AndyWallace的提示

  const nmetadata = {
  metadata: {
    rr123809123asd: 'custom'
  }
};
  sourceFileObject.setMetadata(nmetadata, function(err, apiResponse) {
    sourceFileObject.getMetadata( function(err, metadata, apiResponse) {
      console.log( "got metadata: ", metadata );
    })
   });
};

在Google云存储中获取/设置元数据

我正在尝试从Google Cloud Storage文件设置和检索元数据,但是我尝试的似乎不起作用。我的代码在Kubernetes节点中运行/我有这个:

// let's make sure that the source file is still there.
let sourceFile = storage.bucket(sourceFileObject.bucket).file( sourceFileObject.name );

const metadata = {
      MD_DL_ERROR: 1
};

console.log( `Setting metadata for ${sourceFileObject.name} to: `, metadata );

sourceFile.setMetadata(metadata, function(err, apiResponse) {

    console.log( `NOW GETTING METADATA for: ${sourceFileObject.name}` );

    sourceFile.getMetadata( function(err, metadata, apiResponse) {
        console.log( "got metadata: ", metadata );
    } );
});

但是当它运行时,日志中显示的内容完全没有表明元数据已设置:

 Setting metadata for CA-SACMLS/20022759_000.jpg to:  { MD_DL_ERROR: 1 }

 NOW GETTING METADATA for: CA-SACMLS/20022759_000.jpg
 got metadata:  { kind: 'storage#object',
   id:        'idx-photos-raw-gs.ihouseprd/CA-SACMLS/20022759_000.jpg/1588629892121256',
   selfLink:  'https://blah blah blah',
   mediaLink: 'https://blah blah blah',
   name: 'CA-SACMLS/20022759_000.jpg',
   bucket: 'idx-photos-raw-gs.ihouseprd',
   generation: '1588629892121256',
   metageneration: '2',
   contentType: 'image/jpg',
   storageClass: 'MULTI_REGIONAL',
   size: '124923',
   md5Hash: 'HASHVAL',
   crc32c: 'koOVMQ==',
   etag: 'CKiFmcObm+kCEAI=',
   timeCreated: '2020-05-04T22:04:52.120Z',
   updated: '2020-05-04T22:04:52.509Z',
   timeStorageClassUpdated: '2020-05-04T22:04:52.120Z' }

我想念什么?

回答如下:

[我认为这是由于延迟了文件元数据的修改(这两个请求被触发得太近且太快),因此我在代码中添加了一个sleep函数,看起来像预期的工作。

const {Storage} = require('@google-cloud/storage');
const storage = new Storage();
const myBucket = storage.bucket('fakebucket');

//sleep definition
const sleep = (waitTimeInMs) => new Promise(resolve => setTimeout(resolve, waitTimeInMs));

const sourceFileObject = myBucket.file('demo.zip');
const metadata = {
    metadata: {
        rrasd: 'custom',
        adsdasdasd: 'go here'
    }
};

sourceFileObject.setMetadata(metadata, function(err, apiResponse) {
    //wait for the propagation
    sleep(250).then(() => {
        sourceFileObject.getMetadata(function(err, metadata, apiResponse) {
            console.log("got metadata: ", metadata);
        })
    })
});
};

更新

我更改了代码以避免重新定义const metadata,并且看起来像预期的那样工作,由于我以前的代码可以工作,因此睡眠承诺不会共享元数据变量,感谢@AndyWallace的提示

  const nmetadata = {
  metadata: {
    rr123809123asd: 'custom'
  }
};
  sourceFileObject.setMetadata(nmetadata, function(err, apiResponse) {
    sourceFileObject.getMetadata( function(err, metadata, apiResponse) {
      console.log( "got metadata: ", metadata );
    })
   });
};

发布评论

评论列表 (0)

  1. 暂无评论