【问题标题】:add folder to folder using google drive API使用 google drive API 将文件夹添加到文件夹
【发布时间】:2018-10-04 16:23:13
【问题描述】:

下面的脚本是使用在父文件夹中创建文件夹 “谷歌驱动 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


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢 pinoyyyid!你能给我提供一段代码来进行错误处理吗?谢谢
    • 如果您不知道如何在 PHP 中实现错误处理,请尝试询问同事或使用php 标签在 SO 上发布新问题。
    • 您好,一切正常,但过了一段时间,父文件夹中不再创建文件夹。它在谷歌驱动器的某个地方丢失了,但是创建了一个可以工作并打开服务帐户上传的文件的链接!我认为存在一个问题,或者文件夹是由与我的个人 Google 帐户共享的服务帐户创建的。这真是令人沮丧。感谢您的大力帮助@pimoyyid!请告诉我?
    • 大约 24 小时它正常工作并在共享文件夹中创建新文件夹或发送文件,但 24 小时后失去共享文件夹权限并在日志中出现此错误:{“错误”:{“错误”:[ { "domain": "global", "reason": "notFound", "message": "File not found: .", "locationType": "parameter", "location": "fileId" } ], "code" :404,“消息”:“找不到文件:。” } } 请帮忙
    • @piniyyid 请帮忙
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    相关资源
    最近更新 更多