Этот вопрос задавался раньше, но ответ был с использованием 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');
});
Может кто-нибудь помочь мне вставить контент в файлы, пожалуйста?
Думаю, это единственный курс, спасибо Танаике.
Добро пожаловать. Если вам нужен образец сценария, не стесняйтесь сообщить мне.
Разве это не должно быть media: media,
вместо media,
? Немного сложно определить тип загрузки, выполняемой клиентской библиотекой, но для добавления метаданных и контента вам необходимо использовать возобновляемую или составную загрузку. Указание типа загрузки может быть дополнительным параметром для JS-клиента. Кроме того, вам, вероятно, следует дать ссылку на связанный вопрос.
'media' написано правильно, это сокращение ES6, когда ключ и значение в объекте имеют одно и то же имя. Я попытался установить тип загрузки multipart в вызове create, но это тоже не сработало.
Танаике, не могли бы вы прислать свой образец сценария?
Я выложил образец сценария. Не могли бы вы это подтвердить?
Как насчет этого примера сценария? В моей среде, хотя gapi.client.drive.files.create()
может создавать пустой файл на Google Диске, он не может напрямую загружать файлы, включая содержимое. Я думаю, что это может не иметь возможности загружать файлы и метаданные с помощью multipart / related, хотя это может быть решено в будущем обновлении. Итак, теперь в качестве одного из обходных путей я использую XMLHttpRequest.
Прежде чем использовать этот образец сценария, подтвердите следующие моменты.
В этом примере сценария текстовый файл, содержащий содержимое, создается в папке.
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 Добро пожаловать. Я рад, что ваша проблема решена. И тебе спасибо.
все работает спасибо, @Tanaike также загрузил новую версию с помощью fetch в своем блоге здесь tanaikech.github.io/2018/08/13/…
Я тоже узнал о вашей ситуации.
gapi.client.drive.files.create()
может создать пустой файл. Но, похоже, напрямую загрузить файл с содержимым он не может. Это может быть решено в будущем обновлении. Поэтому на текущем этапе я загружаю файлы на Google Диск, используя XMLHttpRequest в качестве обходного пути. Как насчет этого обходного пути для вашей ситуации?