未定义的属性:尝试将文件插入云端硬盘时的Google_Http_Request :: $ id

时间:2016-01-20 07:30:35

标签: php google-drive-api

我尝试将用户提交的文件插入以用户命名的特定文件夹中,使用yannisg's Google Uploader作为基础和修改后的Google云端硬盘示例。该文件夹是在上载过程中创建的。但我收到有关未定义ID的上述错误。然后它将文件上传到云端硬盘的根文件夹中。我正在使用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));

Var转储第二个脚本给出了对象(Google_Service_Drive_DriveFile),而第一个给出了对象(Google_Http_Request)。是因为第一个是在课堂上吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我解决了。这与推迟有关。在yannisg的剧本中,

$client->setDefer(true);

在较早的函数中声明,这意味着创建文件夹的语句与文件一起执行。难怪它无法抓住父母的身份。将其移动到文件夹插入部分下方后,一切都能正常工作。

//folder insertion    

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