Я пытаюсь следовать документации Google для взаимодействия с Google Drive API, в частности для выполнения возобновляемой загрузки. Я хочу иметь возможность загружать более 50 МБ + файлов изображений, а также изменить описание загруженного файла на Google Диске, чтобы оно содержало некоторый введенный пользователем текст.
Я могу выполнить вход / аутентификацию без проблем. Я запускаю jQuery AJAX-вызов для конечной точки OAuth2 /token
, и он предоставляет мне действительный access_token
, который я затем могу использовать для прямых вызовов API.
Затем я выполняю AJAX-вызовдля конечной точки /files?uploadType=resumable
, согласно документации, установка заголовков HTTP для включения access_token
, установка Content-Type
и т. д. Я также включаю метаданные, которые в данном случае являются предполагаемым именем вновь загруженного файла изображения.
Однако ответ, который я получаю от API, сбивает с толку. Это дает мне status
из 200, что в соответствии с документацией является ожидаемым ответом, но возвращаемое statusText
читает "parsererror"
.
Согласно документации Google, я должен получить обратно location
строка возобновляемого URI сеанса, который я затем могу использовать в качестве конечной точки для запроса PUT, при этом я включаю данные файла в тело запроса. Однако в объекте, который я получаю обратно, я не вижу ни location
строки, ни URI, как ожидалось.
Любая помощь будет принята с благодарностью. Вот вызов jQuery AJAX, который возвращает сбивающий с толку объект:
function fileUpload() {
var metadata = { "name" : "New Image" };
$.ajax({
type: "POST",
beforeSend: function(request) {
request.setRequestHeader("Authorization", "Bearer" + " " + localStorage.getItem("accessToken"));
request.setRequestHeader("Content-Type", "application/json; charset=UTF-8");
request.setRequestHeader("X-Upload-Content-Type", new_mime_type);
request.setRequestHeader("X-Upload-Content-Length", new_file_size);
},
cache: false,
dataType: "json",
data: JSON.stringify(metadata),
url: "https://www.googleapis.com/upload/drive/v3/files?uploadType=resumable",
success: function(data) {
console.log("Resumable upload POST call success. Returned data:");
console.log(data);
// Do a second $.ajax POST call here...?
},
error: function(data) {
console.log("Resumable upload POST call error. Returned data:");
console.log(data);
}
});
}