我正在尝试使用 Javascript json api 从 Google Storage 下载文件。我可以使用下面的代码检索对象信息,但是我不确定如何获取实际媒体。我对 Java 库方法 getMediaHttpDownloader 很熟悉,但在 JS 中没有看到等效方法。任何帮助,将不胜感激!
gapi.client.storage.objects.get({"bucket":"bucketName","object":"objectName"});
我正在尝试使用 Javascript json api 从 Google Storage 下载文件。我可以使用下面的代码检索对象信息,但是我不确定如何获取实际媒体。我对 Java 库方法 getMediaHttpDownloader 很熟悉,但在 JS 中没有看到等效方法。任何帮助,将不胜感激!
gapi.client.storage.objects.get({"bucket":"bucketName","object":"objectName"});
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();
我最终没有使用 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);
我是用 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
的属性值中。img
audio