我正在尝试使用Javascript json api从Google Storage下载文件。我可以使用下面的代码来检索对象信息,但是我不知道如何获得实际的媒体。我熟悉Java库方法getMediaHttpDownloader,但我没有看到JS中的等价物。任何帮助将不胜感激!
gapi.client.storage.objects.get({"bucket":"bucketName","object":"objectName"});
答案 0 :(得分: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();
答案 1 :(得分: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);
答案 2 :(得分:0)
我使用gapi和jQuery做到了。
在我的情况下,对象是公开的。 (必须检查存储浏览器中的 pulbic link )。如果您不希望您的对象公开,请使用$ .post而不是$ .get,并将assessment_token作为标题提供与其他答案中完全相同的内容。
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);
});
};
检索对象内容。
mediaLink
当我们需要下载对象的内容时,这也是相对罕见的情况。在大多数情况下,存储在存储中的对象是媒体文件,如图像和声音,然后我们所需要的只是src
,必须插入到img
适当dom元素的属性值audio
或{{1}})。