2016-01-20 89 views
0

我想插入一个用户提交的文件到用户命名的特定文件夹,使用yannisg's Google Uploader为基础,谷歌驱动器实例的改进版本时Google_Http_Request :: $ ID 。该文件夹在上传过程中创建。但是我得到了关于未定义id的上述错误。然后它将文件上传到Drive的根文件夹。我使用的PHP客户端的v1-master未定义的属性:试图插入文件插入驱动

function upload(){ 
    $client = $this->client; 
    $service = $this->service; //$service = new Google_Service_Drive($client); 

    //Create folder 
    $folder = new Google_Service_Drive_DriveFile(array(
     'mimeType' => 'application/vnd.google-apps.folder')); 
    $folder->setTitle($this->ownerName); //applicant's name 
    $folderData = $service->files->insert($folder, array(
     'fields' => 'id')); 

    //create file 
    $file = new Google_Service_Drive_DriveFile(); 
    $file->title = $this->fileName; 
    $chunkSizeBytes = 1 * 1024 * 1024; 

    $fileRequest = $this->fileRequest; 
    $mimeType = $this->mimeType; 

    //Set parent id 
    $parent = new Google_Service_Drive_ParentReference(); 
    $parent->setId($folderData->id); 
    $file->setParents(array($parent)); 

    $request = $service->files->insert($file); 

    //The rest of the script... 
} 

我认为问题就出在这里

$parent->setId($folderData->id); 

下面是修改示例脚本作品很好相同的部分。我会一直都用这个,但我似乎不能正确地将它集成到另一个脚本我需要运行。而yannisg的有更新的标志照顾。

//Create folder 
$folder = new Google_Service_Drive_DriveFile(array(
    'mimeType' => 'application/vnd.google-apps.folder')); 
$folder->setTitle($_FILES["uploaded"]["name"]); //applicant's name 
$folderData = $service->files->insert($folder, array(
    'fields' => 'id')); 

var_dump($folderData); 

//Create file 
$file = new Google_Service_Drive_DriveFile(); 
$file->title = $_FILES["uploaded"]["name"]; 
$chunkSizeBytes = 1 * 1024 * 1024; 

//Set parent id 
$parent = new Google_Service_Drive_ParentReference(); //previously Google_ParentReference 
$parent->setId($folderData->id); 
$file->setParents(array($parent)); 

瓦尔倾销,第二脚本给我对象(Google_Service_Drive_DriveFile),而第一次给了对象(Google_Http_Request)。是因为第一个在课堂上吗?

在此先感谢。

+0

如果'$ service'仍然来自原始的Google Drive API,则没有'insert'方法。创建文件的适当API是['create'](https://developers.google.com/drive/v3/reference/files/create)。响应对象将是包含'id'的[Files](https://developers.google.com/drive/v3/reference/files#resource)资源,您可以使用它来设置'$ parent-> setId' – adjuremods

+0

@adjuremods我使用的是PHP客户端的V1主版本,而且也没有'create'方法。但是'insert'确实[有](https://developers.google.com/drive/v2/reference/files/insert)。抱歉,我错过了这些信息。将编辑以反映这一点。 – Hanany

+0

我假定[PHP的API客户端](https://developers.google.com/api-client-library/php/start/get_started)将不支持旧版本的REST API,因为该库似乎支持v3的资源。你可以看看[这个回购](https://github.com/google/google-api-php-client/tree/v1-master),这似乎迎合了老版本的Drive API。希望这可以帮助! – adjuremods

回答

0

我解决它。这与延期有关。在yannisg的剧本,

$client->setDefer(true); 

在更早的功能,这意味着语句创建的文件夹与文件一起执行的声明。难怪它无法抓住父母的身份证。将它移到文件夹插入部分下方后,所有事情都可以正常工作。

//folder insertion  

$client->setDefer(true); 
$request = $service->files->insert($file); //file insertion