使用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请求和对日志文件的响应总是一个好主意。。。