#go #google-drive-api #google-sheets-api #file-permissions
#Вперед #google-drive-api #google-sheets-api #файл-разрешения
Вопрос:
Я пытаюсь создать электронную таблицу с использованием Google Drive api со следующим кодом, но у меня нет к ней доступа.
[обновление: файл, похоже, отсутствует на диске, который я указал здесь, кто-нибудь знает, почему это происходит?]
[обновление: добавлены родители в поле, но ошибка 404, файл не найден, заранее спасибо, если кто-нибудь знает причину.]
func (dr *driveService) CreateFile(driveId string, fileName string, parents []string) (*drive.File, error) {
file := amp;drive.File{
DriveId: driveId,
Name: fileName,
MimeType: mimeTypeSpreadsheet,
Parents: parents,
}
file, err := dr.googleDriveService.Files.Create(file).Do()
return file, err
}
Итак, я попытался создать / обновить разрешения, используя этот код, но возникает эта ошибка Error 403: The resource body includes fields which are not directly writable., fieldNotWritable
func (dr *driveService) CreatePermission(fileId string, permissionType string, permissionRole string) error {
permissionToBeCreated := amp;drive.Permission{
Type: permissionType,
Role: permissionRole,
}
filePermission, err := dr.googleDriveService.Permissions.Create(fileId, permissionToBeCreated).Do()
if err != nil {
fmt.Printf("An error occurred creating permission for file: %vn", err)
return err
}
_, err = dr.googleDriveService.Permissions.Update(fileId, filePermission.Id,filePermission).Do()
if err != nil {
fmt.Printf("An error occurred: %vn", err)
return err
}
return nil
}
Итак, попытался удалить update
часть во второй функции, но там есть nil
разрешения для файла.
Итак, у кого-нибудь есть идеи, как это исправить? или, в общем, как я могу создать электронную таблицу, чтобы каждый, у кого есть ссылка, мог получить к ней доступ?
Спасибо!
Комментарии:
1.
[update: the file doesn't seem to be in the drive I specified here, anyone know why is that happening?]
Откуда вы это знаете? Вы проверили это в пользовательском интерфейсе? Или вы пытались получить к нему доступ через API? Если это последнее, можете ли вы показать соответствующий код?2. @Iamblichus Нет, я просто проверил папку на диске и нигде не нашел файл. Кроме того, я попытался перечислить файлы на диске с помощью приведенного ниже кода. Во время отладки я могу оштрафовать файл, но
nil
в поле для идентификатора диска для этого файла, который я создал.3.
func (s *sheetCreator) getExistingSpreadsheet(list *drive.FileList, spreadsheetName string) (bool, string) { for _, file := range list.Files { name := file.Name if name == spreadsheetName { fmt.Print(file.DriveId) //s.driveService.Delete(file.Id) return true, file.Id } } return false, "" }
4. Итак, если я вас правильно понял, вы создаете электронную таблицу на определенном общем диске, и когда вы посещаете общий диск, используя учетную запись, которая имеет к нему доступ, вы не можете найти электронную таблицу? Я не могу воспроизвести это поведение. Находится
parent
ли указанное вами в указанномdrive
? Вы уверены, что проверяете этого родителя?5. да, родительский элемент был правильным, спасибо, и я обнаружил, что ошибка была
file, err := dr.googleDriveService.Files.Create(file).Do()
здесь, должна была бытьsupportAllDrives
установлена какtrue
. В противном случае это не сработает. Спасибо, спасибо!
Ответ №1:
Исправлена проблема, установив значение supportAllDrives
true при создании файла. Однако это уже должно быть устаревшим, но не в моей версии.
Редактировать:
Похоже supportsAllDrives
, что он больше не устарел, по крайней мере, на данный момент. Примечание об устаревании больше не может быть найдено в официальных документах, поэтому, похоже, это все еще поддерживается.
Кроме того, глядя на эту статью, похоже, что изменения в общих дисках были отложены:
Примечание редактора: В связи с текущими событиями команда Google приняла решение избегать дополнительных сбоев в течение этого неопределенного времени. В результате мы откладываем предлагаемые изменения, касающиеся механизма регистрации для общих дисков, на неопределенный срок. Общие диски и файлы на общем диске будут возвращены только тогда, когда в запросах будут установлены соответствующие параметры подписки.
Комментарии:
1. Привет, спасибо за предоставленный ответ. Пожалуйста, обратите внимание, что примечание об устаревании больше не может быть найдено в официальных документах, поэтому, по крайней мере, официально, это все еще поддерживается.
2. Глядя на эту статью , похоже, что изменения в общих дисках были отложены:
Editor's note: Due to current events the Google team has made the decision to avoid causing additional disruption during this uncertain time. As a result, we're postponing the proposed changes regarding the opt-in mechanism for shared drives indefinitely. Shared drives and files within a shared drive will only be returned when requests set the relevant opt-in parameters.