我现在已经挣扎了一段时间;通过谷歌驱动PHP API,我能够创建一个子文件夹或将文件添加到现有文件夹,但尝试将另一个子文件夹或文件放在子文件夹中,似乎是不可能的。
经过研究,我发现了儿童功能,但是在查看此页面上的Google文档之后,我还是不明白如何应用它:[https://developers.google.com/drive/v2/reference/children/insert][1]
我用来将图像添加到文件夹的代码是:
//Insert a file into client specific folder
$file = new Google_Service_Drive_DriveFile();
$file->setTitle(uniqid().'.jpg');
$file->setDescription('A test document');
$file->setMimeType('image/jpeg');
$data = file_get_contents('a.jpg');
$parent = new Google_Service_Drive_ParentReference(); //previously Google_ParentReference
$parent->setId($folderid); //$folderid = determined folder id
$file->setParents(array($parent));
$createdFile = $service->files->insert($file, array(
'data' => $data,
'mimeType' => 'image/jpeg',
'uploadType' => 'multipart'
));
我如何继续将此图片上传到特定的子文件夹,其ID已经确定?
更新: 这是我的组合代码试图:
- 使用existing_folder的父级创建new_sub_folder1,并存储返回的ID
- 使用第1步中存储的ID,使用new_sub_folder1的父级创建new_file1
醇>
$service = new Google_Service_Drive($client);
//create sub folder
$folder = new Google_Service_Drive_DriveFile();
//Setup the folder to create
$folder->setTitle('new_sub_folder1');
$folder->setMimeType('application/vnd.google-apps.folder');
//Create the Folder within existing_folder
$parentid = '0B40CySVsd_Jaa1BzVUQwLUFyODA';
//Set the Parent Folder to existing_folder
$parent = new Google_Service_Drive_ParentReference(); //previously Google_ParentReference
$parent->setId($parentid);
$folder->setParents(array($parent));
//now create the client specific folder new_sub_folder
try {
$createdFile = $service->files->insert($folder, array(
'mimeType' => 'application/vnd.google-apps.folder',
));
// Return the created folder's id
$subfolderid = $createdFile->id;
echo $subfolderid;
return $createdFile->id;
} catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
//Insert a file into client specific folder new_sub_folder
$file = new Google_Service_Drive_DriveFile();
$file->setTitle(uniqid().'.jpg');
$file->setDescription('A test document');
$file->setMimeType('image/jpeg');
$data = file_get_contents('a.jpg');
//Set the Parent Folder to new_sub_folder
$parent = new Google_Service_Drive_ParentReference(); //previously Google_ParentReference
$parent->setId($subfolderid);
$file->setParents(array($parent));
$createdFile = $service->files->insert($file, array(
'data' => $data,
'mimeType' => 'image/jpeg',
'uploadType' => 'multipart'
));
print_r($createdFile);
但是只创建了new_sub_folder1,并且没有文件添加到此文件夹中。
更新: 使用此代码不会在任何位置添加图像。如果我使用相同的方法将.jpg添加到existing_folder,则通过其ID,没有问题。只要我使用sub_folder_1的ID,就不会创建任何内容 - 相同的方法,不同的ID。
答案 0 :(得分:1)
我的猜测是你误解了文件夹在云端硬盘中的工作方式。在Drive中,将文件夹视为更像标签非常重要。
你说“我无法:existing_folder - > new_sub_folder1-> new_file1,new_file2,”
在云端硬盘中,这只是: -
答案 1 :(得分:1)
将文件夹视为火车。你的文件(在这种情况下是一个文件夹)必须附加到其他2个火车车厢才能工作。前一个是父母,下一个是孩子。如果指定父项,但不指定文件夹的子项,则列车不完整。有时火车不完整并不重要,但如果你想使用至少2级文件,你必须使用父级和子级参考。
您的基本文件夹可能有root作为其父文件夹,然后此文件夹可能是另一个子文件夹的父文件,但是如果您打算使用多个级别的层次结构来获取完整的引用,则需要指定它具有子文件夹。所以检查一下这段代码:
$foldID=$id;
$folder4=new Google_Service_Drive_DriveFile();
$folder4->setTitle($folderName);
$folder4->setMimeType('application/vnd.google-apps.folder');
$parent4=new Google_Service_Drive_ParentReference();
$parent4->setId($foldID);
$folder4->setParents(array($parent4));
try {
$createdFile4 = $service->files->insert($folder4, array(
'mimeType' => 'application/vnd.google-apps.folder',
));
}
catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
$foldId4=$createdFile4->id;
$newChild4=new Google_Service_Drive_ChildReference();
$newChild4->setId($createdFile4->id);
try{
$service->children->insert($foldID,$newChild4);
}
catch (Exception $e) {
print "An error occurred: " . $e->getMessage();
}
关于代码的一些事情: foldID是我的主文件夹或根文件夹。我创建一个新的DriveFile,分配文件夹规范,分配我的主文件夹的父引用,尝试插入它,然后指定带子项的子引用 - >插入(ID OF MY MASTER FOLDER,ID OF OF CREATED FOLDER) 。现在引用已完成,子文件夹应该这样处理。对于另一个子子文件夹,只需用正确的参数冲洗并重复。我有一个大约6或7级文件夹和文件的目录结构,所以它可以正确索引文件。