Загрузить в облачный магазин Google, используя json api из javascript
Я пытаюсь использовать gapi
чтобы загрузить изображение в облачное хранилище Google. Текущий код, который у меня есть,
<script src="https://apis.google.com/js/api.js"></script>
<script type="text/javascript">
var imgData = null;
function getImage() {
navigator.camera.getPicture(onSuccess, onFailure, {
destinationType: navigator.camera.DestinationType.FILE_URI,
sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY
});
function onSuccess(imageURI) {
imgData = encodeImageUri(imageURI);
var contentLen = imgData.length;
gapi.load('client', start);
}
function onFailure(message) {
alert("Get image failed: " + message);
}
}
function start() {
// 2. Initialize the JavaScript client library.
console.log('firing google storage api');
gapi.client.init({
'apiKey': 'XXX-XX'
}).then(function() {
// 3. Initialize and make the API request.
console.log('api initialized');
var request = gapi.client.request({
'path': 'https://www.googleapis.com/upload/storage/v1/b/visionapibucket/o?uploadType=media&name=myObject',
'method': 'POST',
'headers': {
'Content-Type': 'image/jpeg'
},
'body': imgData
});
try {
//Execute the insert object request
console.log('executing call');
request.execute(function(resp) {
alert(resp);
});
} catch (e) {
console.log('An error has occurred: ' + e.message);
}
}).then(function(response) {
console.log(response.result);
}, function(reason) {
console.log('Error: ' + reason.result.error.message);
});
};
</script>
Я вижу, что код ударяет оператор в консоли: api initialized
но я не вижу gapi.client.request
вызов или даже печать любой ошибки и т. д.
Я не уверен, что здесь не так. пожалуйста, порекомендуйте
1 ответ
Вы не можете загружать файлы в хранилище Google, используя только ключ API. У вас должен быть жетон Oauth.
Если для запроса требуется авторизация (например, запрос личных данных пользователя), приложение должно предоставить токен OAuth 2.0 вместе с запросом. Приложение может также предоставить ключ API, но это не обязательно.
Если для запроса не требуется авторизация (например, запрос на общедоступные данные), приложение должно предоставить либо ключ API, либо токен OAuth 2.0, либо и то и другое - любой вариант, который вам наиболее удобен.
https://cloud.google.com/storage/docs/json_api/v1/how-tos/authorizing
В вашем случае вы хотите загрузить файл, поэтому у вас должен быть токен oauth.
У вас есть несколько обходных путей:
Вы можете загрузить файл на свой сервер и загрузить его, используя свои учетные данные на сервере, используя учетную запись службы.
https://cloud.google.com/compute/docs/access/service-accountsВы можете создать токен на своем сервере и отправить его своему клиенту. Затем клиент может загрузить один файл в вашу учетную запись Google Storage без маркера постоянного доступа.
Вы можете загрузить в учетную запись Google Storage ваших пользователей. Для этого они должны войти в ваше приложение. https://developers.google.com/identity/protocols/OAuth2
- Последний способ заключается в том, что вы можете загрузить файлы на свой сервер и скопировать их в облако, выполнив
gutil mv
команда. В этом случае все, что вам нужно сделать, это один раз войти в свою облачную учетную запись Google, используяgcloud auth
gustil mv, gcloud mv command
Подробнее о gcloud
утилиту и загрузить ее: https://cloud.google.com/sdk/