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