Я пытаюсь загрузить файл с помощью средства выбора файлов Google Диска (на основе этого примера https://gist.github.com/Daniel15/5994054). Средство выбора файлов работает нормально до того момента, когда дело доходит до загрузки файла. Он сталкивается с ошибкой 400 Bad-Request (lockedDomainCreationFailure).
Вот код:
function downloadFile(file, callback) {
if (file.downloadUrl) {
var accessToken = gapi.auth.getToken().access_token;
var xhr = new XMLHttpRequest();
xhr.open('GET', file.downloadUrl);
xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken);
xhr.onload = function() {
callback(xhr.responseText);
};
xhr.onerror = function() {
callback(null);
};
xhr.send();
} else {
callback(null);
}
}
Вот сообщение об ошибке:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "lockedDomainCreationFailure",
"message": "The OAuth token was received in the query string, which this API forbids for response formats other than JSON or XML. If possible, try sending the OAuth token in the Authorization header instead."
}
],
"code": 400,
"message": "The OAuth token was received in the query string, which this API forbids for response formats other than JSON or XML. If possible, try sending the OAuth token in the Authorization header instead."
}
}
Это говорит о том, что токен OAuth был передан в строке запроса, что, как я вижу, неверно. Вот запрос:
GET /drive/v2/files/{file-id}?key={app-key}&alt=media&source=downloadUrl HTTP/3
Host: content.googleapis.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0
Accept: */*
Accept-Language: en,de;q=0.7,en-US;q=0.3
Accept-Encoding: gzip, deflate, br
Authorization: Bearer {oauth-token}
Origin: http://localhost:8800
DNT: 1
Connection: keep-alive
Referer: http://localhost:8800/
TE: Trailers
Поскольку я использую URL-адрес загрузки, предоставленный Google API, а авторизация указана в заголовке запроса, я понятия не имею, почему я сталкиваюсь с этой ошибкой.
Я ценю любые идеи.
Accept: application/json
решает проблему. Также: что такое{app-id}
? - person ziganotschka   schedule 17.06.2021content.googleapis.com
, аwww.googleapis.com
. Спасибо за этот намек! Я не знаю почему, потому что URL-адрес загрузки из Google API является первым именем хоста. Изменение заголовка Accept не требовалось. URL-адрес запроса должен содержать параметры запросаalt
иsource
, иначе вы получите только метаданные файла, но не его содержимое. Таким образом, URL-адрес загрузкиhttps://www.googleapis.com/drive/v2/files/{file-id}?key={app-key}&alt=media&source=downloadUrl
. Еще раз большое спасибо. - person Suppenhuhn79   schedule 17.06.2021