【问题标题】:How can I create a folder within a Team Drive with the Google API?如何使用 Google API 在团队云端硬盘中创建文件夹?
【发布时间】:2017-07-26 13:00:22
【问题描述】:

我正在努力使用 Google API PHP 客户端库在团队云端硬盘中创建一个文件夹。

我正在使用服务帐户并冒充一个用户(我自己),该用户是团队云端硬盘的成员,并且可以列出云端硬盘的内容。但是,当我创建一个文件夹时,它总是在“我的云端硬盘”而不是指定的团队云端硬盘中创建它。

尝试 1

$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope("https://www.googleapis.com/auth/drive");
$client->setSubject('user@mydomain.com');

$service = new Google_Service_Drive($client);

$folderId = '0AIuzzEYPQu9CUk9PVA';
$fileMetadata = new Google_Service_Drive_DriveFile(array(
    'name' => 'New Test Folder',
    'mimeType' => 'application/vnd.google-apps.folder',
    'supportsAllDrives' => true,
    'parents' => ['0AIuzzEYPQu9CUk9PVA']
));

尝试 2

$fileMetadata = new Google_Service_Drive_DriveFile(array(
    'name' => 'New Test Folder',
    'mimeType' => 'application/vnd.google-apps.folder',
    'supportsAllDrives' => true,
    'driveId' => '0AIuzzEYPQu9CUk9PVA'
));

更新尝试 3

$fileMetadata = new Google_Service_Drive_DriveFile(array(
    'name' => 'Hello 123',
    'supportsAllDrives' => true,
    'mimeType' => 'application/vnd.google-apps.folder',
    'parents' => ['0AIuzzEYPQu9CUk9PVA']
));

$file = $service->files->create($fileMetadata, array(
      'fields' => 'id'));
    printf("Folder ID: %s\n", $file->id);

尝试 3 给出此错误: 致命错误:未捕获的 Google_Service_Exception:{ “error”:{ “errors”:[ { “domain”:“global”、“reason”:“notFound”、“message”:“找不到文件:0AIuzzEYPQu9CUk9PVA。”、“locationType” :“参数”,“位置”:“fileId”}]

我已阅读有关团队云端硬盘和 API 的所有(有限)documentation 并了解团队云端硬盘中的文件夹/文件只能有一个父级(团队云端硬盘的 ID),因此我尝试了父级的变体作为数组和字符串。

文件夹创建正确,只是在错误的地方。

【问题讨论】:

    标签: php google-api google-drive-api google-api-php-client


    【解决方案1】:

    有关如何在 Teamdrives 中创建文件夹的文档不是很清楚,但这是您需要注意的两件事:

    1.'supportsAllDrives' => true, 是可选参数的一部分,而不是文件元数据的一部分。 2. parentdriveId 都应该包含在元数据中

    下面是一个关于如何实现这一点的示例:

    $service = new Google_Service_Drive($client);
    $parent = "0AA3C8xRqwerLglUk9PVA"; //Teamdrive ID
    
    //Create new folder
    $file = new Google_Service_Drive_DriveFile(array(
        'name' => 'Test Folder',
        'mimeType' => 'application/vnd.google-apps.folder',    
        'driveId' => $parent,
        'parents' => array($parent)
    ));
    
    $optParams = array( 
        'fields' => 'id', 
        'supportsAllDrives' => true,
    );
    
    $createdFile = $service->files->create($file, $optParams);
    print "Created Folder: ".$createdFile->id;
    

    请注意:您需要客户端库版本 2.1.3 或更高版本。

    【讨论】:

    • 您好,感谢您的评论。但是,我正在尝试在团队云端硬盘中创建一个文件夹。不创建团队云端硬盘本身。
    • @DannyGreen 啊!在那种情况下,我为没有正确阅读而道歉。我现在得了流感,错过了。让我检查一下,然后回复你。
    • 不用担心,谢谢,我很感激。我已经通过第三次尝试更新了我的问题。我认为它会进入我的驱动器,因为它不接受父母参数。但是现在它说它找不到父母。
    • @DannyGreen 嘿!我做到了,哇!我会尽快更新我的答案。 :)
    • 谢谢!将团队云端硬盘 ID 添加为“teamDriveId”和“父级”是我错过的关键。
    猜你喜欢
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 2018-06-21
    相关资源
    最近更新 更多