Angular gapi загрузить простой текст в Google Drive - PullRequest
1 голос
/ 11 апреля 2020

Я пытаюсь загрузить простой текстовый файл на Google Drive в Angular, используя gapi, но не могу найти способ его заполнения. Мне удалось проверить подлинность и создать файл, а затем я захотел использовать функцию update для обновления содержимого файла, как описано здесь, в документации по Google Drive API v3 .

Вот мой Angular код:

Создание файла:

createFile() {
    return gapi.client.drive.files.create({
      resource: {
        name: `test.csv`
      }
    }).then(response => {
      console.log("Response", response.result.id);
      return response.result.id;
    })
  }

Это создает файл, и я могу видеть его в папке root моего диска. Затем я пытаюсь добавить содержимое этого файла (используя идентификатор файла только что созданного файла), но из документации мне не ясно, как передать содержимое в вызове update.

  updateFile(fileId) {
    return gapi.client.drive.files.update({
      fileId: fileId,
      body: "this is the content of my file"
    }).then(response => {
      console.log("Response", response);
    })
  }

Я также пытался передать содержимое непосредственно в вызове create, основываясь на примере, который они приводят в документации (ссылка выше)

  createFile() {
    return gapi.client.drive.files.create({
      resource: {
        name: `test.csv`
      },
      media: {
        body: "this is the content of my file"
      }
    }).then(response => {
      console.log("Response", response.result.id);
    })
  }

Хотя это тоже не работает.

1 Ответ

0 голосов
/ 12 апреля 2020
  • Вы хотите загрузить текстовый файл на Google Диск, добавив содержимое с помощью Javascript.
  • Вы уже смогли получить и оценить стоимость Google Диск с помощью Drive API.
  • Ваш токен доступа может быть использован для загрузки файла на Google Drive.

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

Проблема и обходное решение:

К сожалению, на текущем этапе кажется, что gapi.client.drive.files.create все еще не может отправить запрос, включая содержимое. Ref И, когда я тестировал метод обновления с использованием gapi сейчас, я думаю, что gapi.client.drive.files.update не может также отправить запрос, включая содержимое.

Так что в этом случае это требуется использовать обходной путь. В этом обходном пути используется fetch. Когда используется fetch, запрос multipart/form-data легко создается.

Шаблон 1:

В этом шаблоне текстовый файл загружается на Google Диск путем включения содержимого с использованием метод create с fetch.

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

const content = 'this is the content of my file';
const metadata = {name: 'test.txt', mimeType: 'text/plain'};
let form = new FormData();
form.append('metadata', new Blob([JSON.stringify(metadata)], {type: 'application/json'}));
form.append('file', new Blob([content], {type: 'text/plain'}));
fetch('https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart', {
  method: 'POST',
  headers: new Headers({'Authorization': 'Bearer ' + gapi.auth.getToken().access_token}),
  body: form
})
.then(res => res.json())
.then(val => console.log(val));

Pattern 2:

В этом шаблоне текстовый файл создается с помощью gapi.client.drive.files.create, а созданный текстовый файл обновляется с помощью метода обновления Drive API с помощью fetch.

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

gapi.client.drive.files.create({resource: {name: 'test.txt'}})
.then(response => {
  const fileId = response.result.id;
  const content = 'this is the content of my file';
  const metadata = {name: 'test.txt', mimeType: 'text/plain'};
  let form = new FormData();
  form.append('metadata', new Blob([JSON.stringify(metadata)], {type: 'application/json'}));
  form.append('file', new Blob([content], {type: 'text/plain'}));
  fetch('https://www.googleapis.com/upload/drive/v3/files/' + fileId + '?uploadType=multipart', {
    method: 'PATCH',
    headers: new Headers({'Authorization': 'Bearer ' + gapi.auth.getToken().access_token}),
    body: form
  })
  .then(res => res.json())
  .then(val => console.log(val));
});

Ссылки:

Если я неправильно понял ваш вопрос и это Я не извиняюсь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...