4

我正在尝试使用 Javascript json api 从 Google Storage 下载文件。我可以使用下面的代码检索对象信息,但是我不确定如何获取实际媒体。我对 Java 库方法 getMediaHttpDownloader 很熟悉,但在 JS 中没有看到等效方法。任何帮助,将不胜感激!

gapi.client.storage.objects.get({"bucket":"bucketName","object":"objectName"});
4

3 回答 3

3

Javascript 库目前不支持直接下载媒体。您仍然可以访问数据,但您必须以另一种方式访问​​它。

根据您的网站所在的域和您正在读取的存储桶,您需要设置 CORS:https ://developers.google.com/storage/docs/cross-origin

然后,您需要直接通过 XML API 请求对象。例如,您可以执行以下操作:

var accessToken = gapi.auth.getToken().access_token;
var xhr = new XMLHttpRequest();
xhr.open('GET', 'https://'+bucket+'.storage.googleapis.com/'+object);
xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken);
xhr.send();
于 2013-02-20T01:07:09.740 回答
2

我最终没有使用 api(不确定您是否可以使用 api 下载,如果您知道如何下载,则感兴趣)而是使用 XmlHttpRequest。为此,我必须为我的谷歌存储桶设置 CORS,以允许我的站点跨域访问。下面是我的代码:

var myToken = gapi.auth.getToken();
    var req = new XMLHttpRequest;

    req.open('GET','https://storage.googleapis.com/bucket/object',
                    true);
    req.setRequestHeader('Authorization', 'Bearer ' + myToken.access_token);

    req.send(null);
于 2013-02-20T00:48:56.557 回答
0

我是用 gapi 和 jQuery 做的。

在我的情况下,对象是公开的。(必须检查存储浏览器中的公共链接)。如果您不希望您的对象公开,请使用 $.post 而不是 $.get 并提供assess_token 作为标题,就像在其他答案中所做的那样。
Storage.getObjectInfo检索对象元数据。 Storage.getObjectMedia检索对象内容。

var Storage = function() {};
Storage.bucket = 'mybucket';
Storage.object = 'myfolder/myobject'; //object name, got by gapi.objects.list 



Storage.getObjectMedia = function(object, callback) {
    function loadObject(objectInfo) {
      var mediaLink = objectInfo.mediaLink;
      $.get(mediaLink, function(data) {   //data is actually object content
        console.log(data);
        callback(data);
      });
    }
    Storage.getObjectInfo(object, loadObject);
};
Storage.getObjectInfo = function(object, callback) {
  var request = gapi.client.storage.objects.get({
    'bucket' : Storage.bucket,
    'object' : Storage.object
  });
  request.execute(function(resp) {
    console.log(resp);
    callback(resp);
  });
};

当我们需要下载对象的内容时,也是比较少见的情况。在大多数情况下,存储在 Storage 中的对象是媒体文件,例如图像和声音,然后我们实际上需要的是mediaLink,必须将其插入到适当的 dom 元素(或)src的属性值中。imgaudio

于 2015-11-01T08:37:52.990 回答