首页 > 解决方案 > 使用 google drive API 将文件夹添加到文件夹

问题描述

下面的脚本是使用“google drive API”在父文件夹中创建文件夹。它工作得很好,但是过了一段时间(20 个文件夹左右)它就不再工作了。没有错误消息,只是没有在父文件夹中创建文件夹。它去了别的地方!

为了启用该创建,创建了一个“服务帐户”,并且父文件夹在“个人 google 帐户”和“服务帐户”之间共享

有人可以提供帮助吗?

php function send_google_drive($id,$fileno,$filename1,$filename2){
        global $wpdb;
        require(ABSPATH.'/wp-content/themes/enemat/googledrives/vendor/autoload.php');
        $client = getClient();
        $service = new Google_Service_Drive($client);
        if(!empty($filename1)){ 
            $results = $service->files->listFiles();
            foreach ($results->getFiles() as $item) {
                if ($item['name'] == 'ENEMAT CRM FILES') {
                    $folderId = $item['id'];
                    break;
                }
            }
            $parentid = $folderId;
            $childid = "";
            foreach ($results->getFiles() as $item) {
                if ($item['name'] == $fileno) {
                    $childid = $item['id'];
                    break;
                }
            }
            if(empty($childid)){
                $fileMetadata = new Google_Service_Drive_DriveFile(array(
                                    'name' => $fileno,
                                    'parents'=>array($parentid),
                                    'mimeType' => 'application/vnd.google-apps.folder'));
                                    $file = $service->files->create($fileMetadata, array(
                                    'fields' => 'id'));
                 $folderId = $file->id;
             }else{
                $folderId = $childid;
             }
                $newPermission = new Google_Service_Drive_Permission();
                $newPermission->setType('anyone');
                $newPermission->setRole('reader');
                $service->permissions->create($folderId, $newPermission);

                $fileMetadata = new Google_Service_Drive_DriveFile(array(
                            'name' => array(basename($filename1)),
                            'parents' => array($folderId)
                        ));
                        $content = file_get_contents($filename1);
                        $files = $service->files->create($fileMetadata, array(
                                'data' => $content,
                                'uploadType' => 'resumable',
                                'fields' => 'id')); 
                $fileids = $files->id; 
                $docusignorgs = "https://drive.google.com/open?id=".$fileids."";
                $folderslink = "https://drive.google.com/drive/folders/".$folderId."";
                @unlink(ABSPATH."wp-content/themes/enemat/pdfs/".basename($filename1));
                $newPermission = new Google_Service_Drive_Permission();
                $newPermission->setType('anyone');
                $newPermission->setRole('reader');
                $service->permissions->create($fileids, $newPermission);

        }

        if(!empty($filename2)){ 
            $results = $service->files->listFiles();
            foreach ($results->getFiles() as $item) {
                if ($item['name'] == '46 - CONTRAT PARTENARIAT') {
                    $folderId = $item['id'];
                    break;
                }
            }

                $fileMetadata = new Google_Service_Drive_DriveFile(array(
                            'name' => array(basename($filename2)),
                            'parents' => array($folderId)
                        ));
                        $content = file_get_contents($filename2);
                        $files = $service->files->create($fileMetadata, array(
                                'data' => $content,
                                'uploadType' => 'resumable',
                                'fields' => 'id')); 
                $fileids1 = $files->id; 
                $contractdrivelink = "https://drive.google.com/open?id=".$fileids1."";
                $newPermission = new Google_Service_Drive_Permission();
                $newPermission->setType('anyone');
                $newPermission->setRole('reader');
                $service->permissions->create($fileids1, $newPermission);


        }

    }

?

标签: google-drive-api

解决方案


没有错误消息的原因是您的代码没有错误处理!如果 GDrive 没有做某事,它会返回一个错误代码和消息来解释原因。您的代码应该捕获该错误并显示它。

我的猜测是你达到了速率限制。要查看这是否是原因,请在每个文件夹创建之间添加 2 秒延迟。如果它没有正确运行,您就知道速率限制是您的问题。


推荐阅读