Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud storage 如何在Google云存储桶中获取对象的所有版本?_Google Cloud Storage_Google Api Js Client - Fatal编程技术网

Google cloud storage 如何在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名称开始的任何其他对象。您必须检

在Google云存储中托管的网页中,我想显示修订历史记录,这需要列出对象的所有版本


使用参数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客户端有什么问题吗?