Загрузите и назовите файл, используя Google Drive REST API v3 и Angular 2
Я создаю сервис Google Drive с помощью Drive REST Api v3 в Angular 2. Большая часть функций имеется: просмотр файла, загрузка, создание и т. Д., Но я не могу найти, как назвать файл (также при создании файла или обновление).
Я использую следующие страницы документов: создавать и обновлять. Они говорят, что имя файла должно быть частью тела запроса. Соответствующий код из моего сервиса Google Drive ниже.
createFile(name :string, content :string) :Promise<Object> {
let headers = new Headers({
'Content-Type': 'text/markdown',
'Authorization': 'Bearer ' + this.token,
'name': name //TODO name not working!
});
let options = new RequestOptions({ headers: headers }); // Create a request option
return this.http
.post('https://www.googleapis.com/upload/drive/v3/files' + '?uploadType=multipart', content, options)
.toPromise();
}
updateFile(id :string, content :string, name :string) :Promise<Object> {
let headers = new Headers({
'Content-Type': 'text/markdown',
'Authorization': 'Bearer ' + this.token,
'id': id,
'name': name //TODO name not working!
}); //generate headers
let options = new RequestOptions({ headers: headers }); // Create a request option
return this.http
.patch('https://www.googleapis.com/upload/drive/v3/files/' + id + '?uploadType=multipart', content, options)
.toPromise();
}
Подводя итог, файлы создаются и обновляются нормально (включая содержимое), но именование и переименование файла не работает вообще.
Спасибо за любую помощь.
3 ответа
Попробуйте разместить имя в теле запроса, а не в заголовке запроса, как описано в разделе Файлы: create:
Тело запроса
- В теле запроса предоставьте ресурс Files со следующими свойствами в качестве метаданных. Для получения дополнительной информации см. Документ о загрузке медиа.
Чтобы проверить это, попробуйте использовать API Explorer, чтобы помочь вам в интерактивном режиме исследовать различные API Google.
Запрос образца:
POST https://www.googleapis.com/drive/v3/files?key={YOUR_API_KEY}
{
"name": "My File"
}
Отклик:
200
{
"kind": "drive#file",
"id": "fileID",
"name": "My File"
}
Также есть соответствующая публикация SO, в которой объясняется, как вставить файл в Google Drive через API.
Надеюсь это поможет.
Я тоже столкнулся с этой проблемой. Я думаю, что есть 3 решения:
использование
multipart upload
https://developers.google.com/drive/v3/web/multipart-upload с различными заголовками для метаданных файла и фактического файла. Я сам застрял там, не нашел, как добавить границы для отдельных заголовков запросов в Angular 2+Загрузить файл в два запроса. Сначала создайте пустой файл с метаданными (в ответе будет указан идентификатор файла), а затем фактически обновите файл.
использование
resumable upload
, Сначала запросите "настроить метаданные" (даже не будет создавать пустой файл) и получите "специальную ссылку", куда отправить запрос на загрузку актуального файла. И у этого подхода есть некоторые другие функции, такие как загрузка кусками. https://developers.google.com/drive/v3/web/resumable-upload
Вот ссылка на другой Вопрос с реализацией возобновляемой загрузки в Angular 2 и DRIVE REST API V3
Angular 2+ HTTP POST и GDrive API. Возобновляемая загрузка файла с именем
Я надеюсь, что это может быть полезно.
Вы пытаетесь установить имя, используя заголовок http. Это не верно. Я не могу понять, как вы думали, что это был способ сделать это, поэтому вам нужно вернуться и перечитать документацию Drive API.
Короче говоря, name: "name"
должен быть объектом JSON, передаваемым в теле запроса, а не в заголовке http.