使用PHP中的服务帐户访问Google drive API

使用PHP中的服务帐户访问Google drive API,php,google-api,google-drive-api,Php,Google Api,Google Drive Api,我必须从我的网站上传文件到谷歌硬盘。所以我需要使用谷歌服务帐户。我在谷歌开发者控制台上创建了它 这就是我到目前为止所做的: session_start(); define('DRIVE_SCOPE', 'https://www.googleapis.com/auth/drive.file'); define('SERVICE_ACCOUNT_EMAIL', 'xxx@developer.gserviceaccount.com'); define('S

我必须从我的网站上传文件到谷歌硬盘。所以我需要使用谷歌服务帐户。我在谷歌开发者控制台上创建了它

这就是我到目前为止所做的:

    session_start();      

    define('DRIVE_SCOPE', 'https://www.googleapis.com/auth/drive.file');
    define('SERVICE_ACCOUNT_EMAIL', 'xxx@developer.gserviceaccount.com');
    define('SERVICE_ACCOUNT_PKCS12_FILE_PATH', 'xxx.p12');

    function buildService() {
        $key = file_get_contents(SERVICE_ACCOUNT_PKCS12_FILE_PATH);
        $auth = new Google_Auth_AssertionCredentials(
            SERVICE_ACCOUNT_EMAIL,
            array(DRIVE_SCOPE),
            $key);
        $client = new Google_Client();

        $client->setAssertionCredentials($auth);
        return new Google_Service_Drive($client);
    }

    function uploadFile($service, $mime, $src) {            
        $file = new Google_Service_Drive_DriveFile();
        $file->setMimeType($mime);
        $data = file_get_contents($src);

        try {
            $createdFile = $service->files->insert($file,
                array(
                    'data' => $data,
                    'mimeType' => $mime,
                    'convert' => true,
                    'uploadType' => 'media'
                )
            );

            return $createdFile;
        } catch (Exception $e) {
            print "An error occurred: " . $e->getMessage();
        }
    }

    $service = buildService();
    uploadFile($service, "text/plain", "document.txt");
我发现以下错误:

注意:未定义索引:第212行D:\dvlp\projects\local\google\u drive\u api\google\Service\Resource.php中的uploadType

注意:未定义索引:第212行D:\dvlp\projects\local\google\u drive\u api\google\Service\Resource.php中的uploadType

UPD 添加了上传类型。错误消失,但没有文件添加到GDrive


请帮帮我。

一些观察。所以,我需要使用谷歌服务帐户严格来说是不真实的。这取决于你是想上传到一个服务帐户还是你自己的帐户,两者是截然不同的。是Google Drive使用的一个奇怪的作用域。如果你不使用服务帐户上载文件,请记住它无法访问文件。服务帐户不是你的。我在你的代码中没有看到uploadType,那么错误到底是从哪里来的?@Steve.B。对不起,我不懂php,也不使用库,所以我帮不了什么忙。有一条建议是,在尝试使用服务帐户之前,确保您了解它是什么。许多人错误地认为对现有帐户实现OAuth机制更容易。事实上,它的存在是为了一个非常特殊的目的,即创建一个全新的应用程序拥有的谷歌帐户,以取代传统用户。话虽如此,猜测可能是php库需要一个uploadType参数multipart,resubable,等等。我想你离此更近了一步。更多的观察。。。我看不到你在任何地方设置标题,所以不知道你希望看到什么文件名。您需要确保mime类型是正确的。具体来说,它是源数据的mime类型。文档中说上传类型的媒体是有效的,但坦率地说,这毫无意义。媒体意味着没有元数据,例如标题、文件夹等。对于新文件,您应该使用多部分或可恢复。弄清楚如何使库转储原始http请求和对日志文件的响应总是一个好主意。。。