Google Drive API V3 Javascript - создание файла с содержимым

Этот вопрос задавался раньше, но ответ был с использованием API V2. В документации Google не разъясняется, как создать файл с его содержимым с помощью клиентского кода javascript. Я пробовал использовать код, указанный в разделе «Узел», однако он создает только файл, а не вставляет никакого содержимого. Вот мой код:

  let fileMetadata = {
    'name': name,
    parents: [parentId]
  };

  let media = {
    mimeType: 'text/plain',
    body: 'content inside file'
  };

  gapi.client.drive.files.create({
    resource: fileMetadata,
    media,
    fields: 'id'
  })
  .then(response => {
    console.info('response: ', response);
  })
  .catch(() => {
    console.info('something is wrong');
  });

Может кто-нибудь помочь мне вставить контент в файлы, пожалуйста?

Я тоже узнал о вашей ситуации. gapi.client.drive.files.create() может создать пустой файл. Но, похоже, напрямую загрузить файл с содержимым он не может. Это может быть решено в будущем обновлении. Поэтому на текущем этапе я загружаю файлы на Google Диск, используя XMLHttpRequest в качестве обходного пути. Как насчет этого обходного пути для вашей ситуации?

Tanaike 10.08.2018 01:50

Думаю, это единственный курс, спасибо Танаике.

Philip-lf 10.08.2018 22:24

Добро пожаловать. Если вам нужен образец сценария, не стесняйтесь сообщить мне.

Tanaike 11.08.2018 01:19

Разве это не должно быть media: media, вместо media,? Немного сложно определить тип загрузки, выполняемой клиентской библиотекой, но для добавления метаданных и контента вам необходимо использовать возобновляемую или составную загрузку. Указание типа загрузки может быть дополнительным параметром для JS-клиента. Кроме того, вам, вероятно, следует дать ссылку на связанный вопрос.

tehhowch 12.08.2018 21:46

'media' написано правильно, это сокращение ES6, когда ключ и значение в объекте имеют одно и то же имя. Я попытался установить тип загрузки multipart в вызове create, но это тоже не сработало.

Philip-lf 13.08.2018 19:29

Танаике, не могли бы вы прислать свой образец сценария?

Philip-lf 13.08.2018 19:29

Я выложил образец сценария. Не могли бы вы это подтвердить?

Tanaike 14.08.2018 04:39
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
7
2 359
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как насчет этого примера сценария? В моей среде, хотя gapi.client.drive.files.create() может создавать пустой файл на Google Диске, он не может напрямую загружать файлы, включая содержимое. Я думаю, что это может не иметь возможности загружать файлы и метаданные с помощью multipart / related, хотя это может быть решено в будущем обновлении. Итак, теперь в качестве одного из обходных путей я использую XMLHttpRequest.

Прежде чем использовать этот образец сценария, подтвердите следующие моменты.

  • В вашей ситуации вы уже могли создавать файлы с помощью gapi. В моем сценарии токен доступа извлекается с помощью gapi.
  • Когда вы используете этот скрипт, пожалуйста, установите fileContent и метаданные.

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

В этом примере сценария текстовый файл, содержащий содержимое, создается в папке.

var fileContent = 'sample text'; // As a sample, upload a text file.
var file = new Blob([fileContent], {type: 'text/plain'});
var metadata = {
    'name': 'sampleName', // Filename at Google Drive
    'mimeType': 'text/plain', // mimeType at Google Drive
    'parents': ['### folder ID ###'], // Folder ID at Google Drive
};

var accessToken = gapi.auth.getToken().access_token; // Here gapi is used for retrieving the access token.
var form = new FormData();
form.append('metadata', new Blob([JSON.stringify(metadata)], {type: 'application/json'}));
form.append('file', file);

var xhr = new XMLHttpRequest();
xhr.open('post', 'https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&fields=id');
xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken);
xhr.responseType = 'json';
xhr.onload = () => {
    console.info(xhr.response.id); // Retrieve uploaded file ID.
};
xhr.send(form);

Тело запроса:

В этом сценарии form выглядит следующим образом. Он отправляется на Google Диск с помощью метода создания Drive API.

------WebKitFormBoundaryxX0XmxgooMjdUECR
Content-Disposition: form-data; name = "metadata"; filename = "blob"
Content-Type: application/json

{"name":"sampleName","mimeType":"text/plain","parents":["#####"]}
------WebKitFormBoundaryxX0XmxgooMjdUECR
Content-Disposition: form-data; name = "file"; filename = "blob"
Content-Type: text/plain

sample text
------WebKitFormBoundaryxX0XmxgooMjdUECR--

В моем окружении я подтвердил, что это работает нормально. Но если это не сработало в вашей среде, мне очень жаль.

Потрясающий! Спасибо!

Philip-lf 16.08.2018 03:17

@ Philip-lf Добро пожаловать. Я рад, что ваша проблема решена. И тебе спасибо.

Tanaike 16.08.2018 04:08

все работает спасибо, @Tanaike также загрузил новую версию с помощью fetch в своем блоге здесь tanaikech.github.io/2018/08/13/…

Steve Phuc 13.08.2019 13:36

Другие вопросы по теме