Google cloud storage 如何在Google云存储桶中获取对象的所有版本?
在Google云存储中托管的网页中,我想显示修订历史记录,这需要列出对象的所有版本Google cloud storage 如何在Google云存储桶中获取对象的所有版本?,google-cloud-storage,google-api-js-client,Google Cloud Storage,Google Api Js Client,在Google云存储中托管的网页中,我想显示修订历史记录,这需要列出对象的所有版本 使用参数return list versions all objects向bucket发送GET请求。是否有任何方法可以列出单个对象的所有版本,如javascript中的gsutil ls-la。最接近的方法是使用versions=true和prefix=YOUR\u OBJECT\u NAME GCS将以一个对象列表作出响应,该列表以您对象的所有版本开始,并继续以您的\u对象\u名称开始的任何其他对象。您必须检
使用参数return list versions all objects向bucket发送GET请求。是否有任何方法可以列出单个对象的所有版本,如javascript中的
gsutil ls-la
。最接近的方法是使用versions=true
和prefix=YOUR\u OBJECT\u NAME
GCS将以一个对象列表作出响应,该列表以您对象的所有版本开始,并继续以您的\u对象\u名称开始的任何其他对象。您必须检查这些项目,以查看列表何时用完了对象的版本并转移到其他对象
如果碰巧只有一个对象以您的对象名称开头(例如,您的对象是“foo.txt”,并且没有名为“foo.txt.backup”的文件),您将得到您想要的文件。不过,您可能不想将此作为一种常规做法。Brondon的答案适用于XML,但不适用于gapi客户端
/**
* Get versions meta data of the object.
* @return {goog.async.Deferred} return history of the object.
*/
mbi.data.Object.prototype.history = function() {
var df = new goog.async.Deferred();
var use_gapi = true;
var name = this.getName();
if (use_gapi) {
// GAPI does not return result for versions request.
var params = {
'bucket': this.getBucketName(),
'versions': true,
'prefix': name
};
// console.log(params);
var req = gapi.client.rpcRequest('storage.buckets.get',
mbi.app.base.GAPI_STORAGE_VERSION, params);
req.execute(function(json, row) {
if (json) {
df.callback(json);
} else {
df.errback();
throw new Error(row);
}
});
} else {
var xm = mbi.data.Object.getXhr();
var uri = new goog.Uri(this.getUrl());
uri.setParameterValue('versions', 'true');
uri.setParameterValue('max-keys', '25');
uri.setParameterValue('prefix', name);
var url = uri.setPath('').setFragment('').toString();
xm.send(url, url, 'GET', null, {}, 1, function(e) {
var xhr = /** @type {goog.net.XhrIo} */ (e.target);
if (xhr.isSuccess()) {
var xml = xhr.getResponseXml();
// console.log(xml);
var json = mbi.utils.xml.xml2json(xml);
var items = json['ListBucketResult']['Version'];
var versions = goog.isArray(items) ? items : items ? [items] : [];
versions = versions.filter(function(x) {
return x['Key'] == name;
});
df.callback(versions);
} else {
df.errback(xhr.getStatus() + ' ' + xhr.getResponseText());
}
});
}
return df;
};
GAPI返回如下,不带版本元:
[
{
"id": "gapiRpc",
"result": {
"kind": "storage#bucket",
"id": "mbiwiki-test",
"name": "mbiwiki-test",
"timeCreated": "2013-08-20T01:18:46.957Z",
"metageneration": "9",
"owner": {
"entity": "group-00b4903a97262a358b97b95b39df60893ece79605b60280ad389c889abf70645",
"entityId": "00b4903a97262a358b97b95b39df60893ece79605b60280ad389c889abf70645"
},
"location": "US",
"website": {
"mainPageSuffix": "index.html",
"notFoundPage": "error404.html"
},
"versioning": {
"enabled": true
},
"cors": [
{
"origin": [
"http://static.mechanobio.info",
"http://mbinfo-backend.appspot.com",
"https://mbinfo-backend.appspot.com",
"http://localhost",
"chrome-extension://pbcpfkkhmlbicomenogobbagaaenlnpd",
"chrome-extension://mhigmmbegkpdlhjaphlffclbgkgelnbe",
"chrome-extension://jhmklemcneaienackijjhdikoicmoepp"
],
"method": [
"GET",
"HEAD",
"POST",
"PUT",
"DELETE",
"PATCH"
],
"responseHeader": [
"content-type",
"Authorization",
"Cache-Control",
"x-goog-meta-reviewer"
]
}
],
"storageClass": "STANDARD",
"etag": "CAk="
}
}
]
清晰的技巧!它可以在XML API上工作,但不能通过gapi客户端。我认为只要结果的
键
与请求对象名称匹配,我们就安全了。这很奇怪。我能问一下gapi客户端有什么问题吗?