Скачивание файла с Google Drive в Javascript клиенте - PullRequest
1 голос
/ 25 марта 2020

Я пытаюсь интегрировать Google Диск в мое приложение angular, чтобы наши пользователи могли копировать содержимое из документов и загружать свои изображения в мое приложение. Согласно файлу : получить документацию API , я использую приведенный ниже код для получения файла

var request = gapi.client.drive.files.get({
        'fileId': fileId
    });
     var temp = this;
     request.execute(function (resp) {
});

Но в ответ я получаю только имя файла и идентификатор. не является URL загрузки, который требуется для функции downloadFile. Ответ:

{kind: "drive#file", 
  id: "1KxxxxxxxxxxxxxxycMcfp8YWH2I",
   name: " Report-November", 
   mimeType: "application/vnd.google-apps.spreadsheet", 
    result:{
kind: "drive#file"
id: "1K7DxawpFz_xiEpxxxxxxxblfp8YWH2I"
name: "  Report-November"
mimeType: "application/vnd.google-apps.spreadsheet"
  }
}



Функция загрузки файла:

/**
 * Download a file's content.
 *
 * @param {File} file Drive File instance.
 * @param {Function} callback Function to call when the request is complete.
 */
 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);
    }
}

Я что-то упустил? Это правильный подход для загрузки файла с диска на стороне клиента?

1 Ответ

2 голосов
/ 25 марта 2020

Вопрос 1:

  • Вы хотите загрузить файл из Drive API.
  • Ваш токен доступа может быть использован для загрузки файла.
  • У вас есть разрешение на скачивание файла.
  • Вы используете метод files.get в Drive API. В данном случае это не Google Docs.
  • Вы хотите добиться этого, используя gapi с Javascript.

Если мое понимание верно, как насчет этой модификации? Пожалуйста, подумайте об этом как об одном из нескольких возможных ответов.

Точка модификации:

  • Чтобы загрузить файл с помощью метода files.get в Drive API, используйте alt=media для параметра запроса. Когда это отражается на гэппи, добавьте alt: "media" к объекту запроса.

Модифицированный скрипт:

Когда ваш скрипт модифицирован, он становится следующим:

С :
var request = gapi.client.drive.files.get({
        'fileId': fileId
    });
     var temp = this;
     request.execute(function (resp) {
});
Кому:
gapi.client.drive.files.get({
  fileId: fileId,
  alt: "media"
}).then(function(res) {

  // In this case, res.body is the binary data of the downloaded file.

});

Ссылка:

Вопрос 2:

  • Вы хотите загрузить Google Document в формате DOCX.

В этом случае используйте метод files.export следующим образом.

Пример сценария:

gapi.client.drive.files.export({
  fileId: fileId,
  mimeType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
}).then(function(res) {

  // In this case, res.body is the binary data of the downloaded file.

});
  • В этом случае fileId - это идентификатор файла Документа Google. Пожалуйста, будьте осторожны.

Ссылка:

...