【问题标题】:Dynamically Create Folders and Subfolders动态创建文件夹和子文件夹
【发布时间】:2015-05-06 20:40:51
【问题描述】:

我在 php 中有几个脚本来创建文件夹并将文件上传到所需的文件夹,但我似乎无法创建新文件夹、新子文件夹或创建另一个函数来执行此过程。我必须使用父母/孩子的特定程序吗?这是我用来创建文件夹的功能代码:

function getFolderExistsCreate($service, $folderName, $folderDesc) {
// Lista el root de drive
$files = $service->files->listFiles();
$found = false;

// Checa los folders en ciclo
foreach ($files['items'] as $item) {
    if ($item['title'] == $folderName) {
        $found = true;
        return $item['id'];
        break;
    }
}

// Lo crea si no lo encontro
if ($found == false) {
    $folder = new Google_Service_Drive_DriveFile();

    //Poner los settings del folder
    $folder->setTitle($folderName);

    if(!empty($folderDesc))
        $folder->setDescription($folderDesc);

    $folder->setMimeType('application/vnd.google-apps.folder');

    //Try de crear el folder
    try {
        $createdFile = $service->files->insert($folder, array(
            'mimeType' => 'application/vnd.google-apps.folder',
            ));

        // Regresa el nuevo id del folder
        return $createdFile->id;
    } catch (Exception $e) {
        print "An error occurred: " . $e->getMessage();
    }
  }
}

请帮忙,谢谢!

【问题讨论】:

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


    【解决方案1】:

    要为特定文件夹创建子文件夹,您应该在文件的parents 属性中指定正确的 ID。

    "parents": [{"id":"0ADK06pfg"}]
    

    查看page了解更多信息

    希望有帮助!

    【讨论】:

      【解决方案2】:

      您需要设置要放置的文件夹的父ID。

      来自files.insert的代码

      // Set the parent folder.
        if ($parentId != null) {
          $parent = new Google_Service_Drive_ParentReference();
          $parent->setId($parentId);
          $file->setParents(array($parent));
        }
      

      获取文件夹 ID 的最简单方法是执行 files.list 使用 q 搜索选项仅搜索文件夹 mimeType = 'application/vnd.google-apps.folder' 然后您可以找到要放置新文件夹或文件的文件夹。

      【讨论】:

        【解决方案3】:

        Google_Service_Drive_ParentReference() 类似乎不再起作用了。使用这个:

        $fileMetadata = new Google_Service_Drive_DriveFile(array(
                //Set the Random Filename
                'name' => $rdmName,
                //Set the Parent Folder
                'parents' => array('0BzaRxkCDivjIM1pUYU1SLWVxOGM')
            ));
        
        
            try{
        
        
                $newFile = $drive_service->files->create(
                    $fileMetadata,
                    array(
                        'data' => file_get_contents(TESTFILE),
                        'mimeType' => 'application/pdf',
                        'uploadType' => 'media'
                    )
                );
        
        
            } catch(Exception $e){
        
                echo 'An error ocurred : ' . $e->getMessage();
        
            }
        

        【讨论】: