【问题标题】:Google Drive Folders/Files Created Using API Not Visible on Google Interface使用 API 创建的 Google Drive 文件夹/文件在 Google 界面上不可见
【发布时间】:2015-02-11 11:06:13
【问题描述】:

这很奇怪。我使用 Google Drive API 在 Google Drive 中创建了一个文件夹,然后在那里上传了一个文件。我可以使用相同的 API 检索文件夹和文件(代码在各个方面都运行良好)。但是,当我转到 Google Drive Web 界面时,我似乎找不到文件夹或文件。该文件也不会同步到我的本地驱动器。 API 或其他地方是否有设置将“可见性”设置为 ON?

提前谢谢你。

【问题讨论】:

  • 您确定登录到创建文件时使用的帐户吗?通过 API 显示的 about.get() 是什么?我怀疑您正在混合帐户或使用服务帐户...
  • 让我检查 about.get() 输出。什么是服务帐户?我只有一个 Google Drive 帐户(与我的 gmail 帐户相同)
  • 你可以试试这个答案,它绝对可以正常工作:stackoverflow.com/a/67467388/7610978

标签: google-drive-api


【解决方案1】:

我有同样的问题。原来是权限。当文件由服务帐户上传时,服务帐户被设置为所有者,然后您无法从 Drive UI 中看到文件。我在网上找到了解决方案(但似乎无法再次找到它......) 这就是我所做的......

它是 C#,你的问题没有具体说明。您感兴趣的代码是上传后获得响应正文后的权限内容...

FilesResource.InsertMediaUpload request = service.Files.Insert(body, stream, "text/plain");
request.Upload();

//Start here...
Google.Apis.Drive.v2.Data.File file = request.ResponseBody;
Permission newPermission = new Permission();
newPermission.Value = "yourdriveaccount@domain.com";
newPermission.Type = "user";
newPermission.Role = "reader";
service.Permissions.Insert(newPermission, file.Id).Execute();

此后,该文件在云端硬盘 UI 上可见。我尝试为角色指定“所有者”,就像 api 建议的那样,但我得到并错误地说他们正在处理它。我还没有玩过其他设置,(我昨晚在文学上这样做了)。如果您对任何其他权限组合有任何运气,请告诉我。

希望有帮助

【讨论】:

  • 实际上,文件并没有使用服务帐户上传。
  • 谢谢!我在红宝石中这样做并面临确切的问题。 This link 你的回答帮助了我。
  • 我对 nodejs 有同样的问题。为我自己的帐户添加了权限,它开始显示在 Google 云端硬盘的“与我共享”下。
【解决方案2】:

我遇到了同样的问题,但这解决了我使用列表数据类型作为父母参数,例如:如果想在文件夹下创建一个文件夹(“1TBymLMZXPGkouw-lTQ0EccN0CMb_yxUB”),那么 python 代码看起来像

drive_service = build('drive', 'v3', credentials=creds)
body={
            'name':'generated_folder',
            'parents':['1TBymLMZXPGkouw-lTQ0EccN0CMb_yxUB'],
            'mimeType':'application/vnd.google-apps.folder'
    }
doc = drive_service.files().create(body=body).execute()

【讨论】:

  • 谢谢老兄!神奇在于“父母”:[SHARED_DIRECTORY],
【解决方案3】:

虽然权限问题是此问题的主要原因。在使用服务帐户上传文件夹或文件后,我所做的是指定父文件夹。如果您在没有父文件夹 ID 的情况下上传/创建文件夹/文件,则该对象的所有者将是您正在使用的服务帐户。
通过指定父 ID,它将使用继承的权限
这是我在 php (google/apiclient) 中使用的代码

$driveFile = new Google\Service\Drive\DriveFile();
$driveFile->name = $req->name;
$driveFile->mimeType = 'application/vnd.google-apps.folder';
$driveFile->parents = ['17SqMne7a27sKVviHcwPn87epV7vOwLko'];
$result = $service->files->create($driveFile);

【讨论】:

    【解决方案4】:

    创建文件夹时,应确保设置了父级,例如“root”。如果没有这个,它将不会出现在“我的云端硬盘”中,而只会出现在搜索中(您是否尝试过在 UI 中搜索?)

    由于您已经创建了该文件夹,您可以更新该文件并为其提供父根目录。

    您可以使用Parents insert 'Try it now' 示例对其进行测试。

    将您的文件夹 ID 放入 fileId 框中,然后在请求正文中的 ID 字段中添加 root

    【讨论】:

    • 我一直在正确设置父母。我在根目录下创建一个文件夹,然后将文件上传到该文件夹​​。通过相同的文件夹结构阅读工作正常。
    【解决方案5】:
    private void SetFilePermission(string fileId)
        {
            Permission adminPermission = new Permission
            {
                EmailAddress = "test@gmail.com", // email address of drive where 
                                                    //you want to see files
                Type = "user",
                Role = "owner"
            };
            var permissionRequest = _driveService.Permissions.Create(adminPermission, fileId);
            permissionRequest.TransferOwnership = true;   // to make owner (important)
            permissionRequest.Execute();
            Permission globalPermission = new Permission
            {
                Type = "anyone",
                Role = "reader"
            };
            var globalpermissionRequest = _driveService.Permissions.Create(globalPermission, fileId);
            globalpermissionRequest.Execute();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多