Я решил перейти с Google Drive API версии v2 на v3, и это была непростая задача. Даже подумал, что Google написал эту документацию, в ней много пробелов, и в Интернете мало информации об этом.
Я делюсь тем, что нашел.
Я решил перейти с Google Drive API версии v2 на v3, и это была непростая задача. Даже подумал, что Google написал эту документацию, в ней много пробелов, и в Интернете мало информации об этом.
Я делюсь тем, что нашел.
Сначала прочитайте официальные документы: Перейдите на Google Drive API v3
Download изменилось. Поле downloadUrl
больше не существует. Теперь это может быть достигнуто с помощью этого:
service.files().get(fileId).executeMediaAndDownloadTo(outputStream);
Я попробовал новое поле webContentLink
, но он возвращает содержимое HTML, а не содержимое файла. Другими словами, он дает вам ссылку на веб-интерфейс веб-диска.
Загрузка только требует изменить слово insert
для create
, не более того.
Я потратил некоторое время на это. Используется для простого service.files().trash(fileId).execute()
.
Документы говорят
files.trash → files.update с {'trashed': true}
Пример кода для update
на v2 делает файл get
в файле, устанавливает новые значения и затем вызывает update
.
В v3, используя update
, как это делает это исключение:
{
"code" : 403,
"errors" : [ {
"domain" : "global",
"message" : "The resource body includes fields which are not directly writable.",
"reason" : "fieldNotWritable"
} ],
"message" : "The resource body includes fields which are not directly writable."
}
Решение состоит в том, чтобы создать пустой File
параметр только для новых значений:
File newContent = new File();
newContent.setTrashed(true);
service.files().update(fileId, newContent).execute();
Примечание: File
относится к com.google.api.services.drive.model.File
(это не java.io.File
).
Файлы, возвращаемые service.files().list()
, теперь не содержат информации, т.е. каждое поле имеет значение NULL. Если вы хотите, чтобы list
на v3 вел себя как в v2, назовите его следующим образом:
service.files().list().setFields("nextPageToken, files");
Документы Поиск файлов используют setFields("nextPageToken, files(id, name)")
, но нет документации о том, как получить всю информацию для файла. Теперь вы знаете, просто включите "файлы".
Полные ресурсы больше не возвращаются по умолчанию. Используйте параметр запроса
fields
для запроса определенных полей, которые будут возвращены. Если значение не указано, возвращается только подмножество обычно используемых полей.
Эта последняя часть не совсем верна, поскольку в некоторых случаях вы вынуждены использовать setFields
. Например, если вы используете service.about().get().execute()
, вы получите эту ошибку:
"The 'fields' parameter is required for this method."
который решается путем вызова service.about().get().setFields("user, storageQuota").execute()
, например.
В конце документа указывается как:
Параметр запроса
fields
должен быть указан для методов, возвращающих
Для остальных изменений просто следуйте таблице Google в документах.
У меня нет репутации комментировать (извините), но предоставленная строка кода в принятом ответе, service.about().get().setFields("user, storageQuota").execute()
, не запускается. вместо этого он выдает ошибку атрибута:
about = service.about().get().setFields("user", "storageQuota").execute()
AttributeError: 'HttpRequest' object has no attribute 'setFields'
Вместо этого строка должна выглядеть так:
service.about().get(fields = "user, storageQuota").execute()