我创建了一个简单的PHP脚本来使用Google的Drive SDK。计划是最终我们将使用Google Drive作为我们部分网络内容的CDN形式(我们公司已经升级到1TB)。
代码在某种程度上起作用,因为它成功验证并上传文件。问题是,文件总是被破坏,无法使用Drive本身或通过下载查看。
代码相对简单,只需从维基百科中提取图像并尝试上传:
<?php
require_once 'Google/Client.php';
require_once 'Google/Service/Drive.php';
require_once 'Google/Service/Oauth2.php';
$client = new Google_Client();
//$client->setUseObjects(true);
//$client->setAuthClass('apiOAuth2');
$client->setScopes(array('https://www.googleapis.com/auth/drive.file'));
$client->setClientId('***');
$client->setClientSecret('***');
$client->setRedirectUri('***');
$client->setAccessToken(authenticate($client));
// initialise the Google Drive service
$service = new Google_Service_Drive($client);
$data = file_get_contents('http://upload.wikimedia.org/wikipedia/commons/3/38/JPEG_example_JPG_RIP_010.jpg');
// create and upload a new Google Drive file, including the data
try
{
//Insert a file
$file = new Google_Service_Drive_DriveFile($client);
$file->setTitle(uniqid().'.jpg');
$file->setMimeType('image/jpeg');
$createdFile = $service->files->insert($file, array(
'data' => $data,
'mimeType' => 'image/jpeg',
));
}
catch (Exception $e)
{
print $e->getMessage();
}
print_r($createdFile);
?>
print_r
语句执行,我们获取有关该文件的信息。但是,正如我所提到的,该文件是不可见的,并且似乎已损坏。任何人都可以对这个问题有所了解吗?
答案 0 :(得分:2)
在对文档进行更多挖掘(当前公共文档严重过时)后,我发现有必要将另一个参数作为insert()
函数的body
参数的一部分发送(函数调用中的第二个参数。)
使用以下内容:
$createdFile = $service->files->insert($doc, array(
'data' => $content,
'mimeType' => 'image/jpeg',
'uploadType' => 'media', // this is the new info
));
我能够让一切正常运转。我会在这里留下这个问题,因为我认为直到谷歌实际更新PHP API的文档才会非常有用。
答案 1 :(得分:0)
您的代码似乎没问题。 您之后是否曾尝试从Google云端硬盘下载此文件并查看该文件? 我也知道它的abit很愚蠢,但是你试过在使用file_get_contents()之后立即在磁盘上写文件。你知道只是为了确定100%不好的地方。