Javascript 使用Json api下载Google存储媒体

Javascript 使用Json api下载Google存储媒体,javascript,google-cloud-storage,Javascript,Google Cloud Storage,我正在尝试使用Javascript json api从Google存储下载一个文件。我可以使用下面的代码检索对象信息,但是我不确定如何获取实际的媒体。我熟悉Java库方法getMediaHttpDownloader,但在JS中没有看到类似的方法。任何帮助都将不胜感激 gapi.client.storage.objects.get({"bucket":"bucketName","object":"objectName"}); 我最终没有使用api(不确定您是否可以使用api下载,如果您知道如何下

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

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

我最终没有使用api(不确定您是否可以使用api下载,如果您知道如何下载,请感兴趣),而是使用XmlHttpRequest。为此,我必须为我的google存储桶设置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);

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

根据您的网站所在的域和您阅读的存储桶,您需要设置CORS:

然后,您需要通过XMLAPI直接请求对象。例如,您可以这样做:

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();

我使用gapi和jQuery实现了这一点

在我的例子中,对象是公共的。(必须选中存储浏览器中的pulbic链接)。如果您不希望对象公开,请使用$.post而不是$.get,并像在其他答案中一样提供assessment_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);
  });
};
当我们需要下载object的内容时,这种情况也相对少见。在大多数情况下,存储在存储器中的对象是像图像和声音这样的媒体文件,而实际上我们需要的是
mediaLink
,它必须插入到相应dom元素的
src
属性值(
img
audio