所以我在使用GAPI上传PHP时遇到了奇怪的问题。该文件实际上是在驱动器上创建的,但由于某种原因,数据不会出现在Google上,而只是创建一个0字节的文件。
这是我的代码:
function uploadFile($service, $title, $description, $parentId, $mimeType, $filepath) {
$mimeType = "image/png";
$title = "test.png";
$file = new Google_Service_Drive_DriveFile();
$file->setTitle($title);
$file->setDescription($description);
$file->setMimeType($mimeType);
// Set the parent folder.
if ($parentId != null) {
$parent = new Google_Service_Drive_ParentReference();
$parent->setId($parentId);
$file->setParents(array($parent));
}
try {
$data = file_get_contents();
$createdFile = $service->files->insert($file, array(
'data' => $data,
'mimeType' => $mimeType,
));
// Uncomment the following line to print the File ID
// print 'File ID: %s' % $createdFile->getId();
//return $createdFile;
} catch (Exception $e) {
echo "An error occurred: " . $e->getMessage();
}
}
一切都经过验证,所以我知道这不是问题所在。当我输出$ data时,我得到了你在拉文件时通常得到的垃圾,所以我知道这不是问题..所有的范围都应该是正确的但是在这里它们仍然是:
$client->addScope("https://www.googleapis.com/auth/drive");
$client->addScope("https://www.googleapis.com/auth/drive.file");
$client->addScope("https://www.googleapis.com/auth/drive.appdata");
$client->addScope("https://www.googleapis.com/auth/drive.scripts");
$client->addScope("https://www.googleapis.com/auth/drive.apps.readonly");
$client->addScope("https://www.googleapis.com/auth/drive.metadata.readonly");
$client->addScope("https://www.googleapis.com/auth/drive.readonly");
我没有关于这个问题的文档,所以任何帮助都会非常感激!
答案 0 :(得分:6)
我能够解决这个问题,并希望将其留给可能有此问题的其他人。 查看源代码并注意到一条未被触发的If语句。
更改
$createdFile = $service->files->insert($file, array(
'data' => $data,
'mimeType' => $mimeType,
));
要
$createdFile = $service->files->insert($file, array(
'data' => $data,
'mimeType' => $mimeType,
'uploadType' => 'media' //add this for pdfs to work
));
就这么简单!当它变得那么容易讨厌......