Создать / обновить разрешение Google Диска в Go / [Создал электронную таблицу с использованием api, но не имею к ней доступа]

#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.