2013-02-19 2 views
3

Я пытаюсь загрузить файл из Google Storage с помощью Javascript json api. Я могу получить информацию о объекте, используя код ниже, однако я не уверен, как получить фактический носитель. Я знаком с методом библиотеки Java getMediaHttpDownloader, но я не вижу эквивалента в JS. Любая помощь будет оценена!Загрузка Google Storage Media с Json api

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

ответ

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

Я в конечном итоге не используя API (не уверен, что вы можете загрузить с помощью API, интересно, если вы знаете, как) и используя XmlHttpRequest вместо этого. Для этого мне пришлось настроить CORS для моего хранилища Google, чтобы разрешить доступ к домену на моем сайте. Ниже приведен мой код:

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

Я сделал это с помощью gapi и jQuery.

В моем случае объект является общедоступным. (Пульбическая ссылка в браузере хранения должна быть проверена). В случае, если вы не хотите, чтобы ваш объект был общедоступным, используйте $ .post вместо $ .get и обеспечивайте оценку_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); 
    }); 
}; 

Это также относительно редкий случай, когда нам нужно загрузить содержимое объекта. В большинстве случаев объекты, хранящиеся в Хранилище, являются медиафайлами, такими как изображения и звуки, и тогда все, что нам нужно, это на самом деле mediaLink, которое должно быть вставлено в значение атрибута src соответствующего элемента dom (img или audio).

Смежные вопросы