Google Drive API возвращает неожиданные результаты при возобновляемой загрузке - PullRequest
1 голос
/ 18 октября 2019

Я пытаюсь следовать документации 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);
            }
        });

    }
...