When I try to upload file to Google Drive via Google API ( https://github.com/google/google-api-php-client ) I get error "Insufficient Permission" (reading files goes without any problem). Here is code sample:
require_once 'google-api-php-client/vendor/autoload.php';
class GoogleConnector {
private $client;
public $report;
function __construct($filesToSend, $backupFolder) {
session_start();
$this->client = new Google_Client();
$this->client->setAuthConfig('client_secret.json');
$this->client->addScope("https://www.googleapis.com/auth/drive");
//also try different variants of this:
//$this->client->setScopes(implode(' ', array(Google_Service_Drive::DRIVE)));
if (isset($_SESSION['access_token']) && $_SESSION['access_token']) {
$this->client->setAccessToken($_SESSION['access_token']);
$service = new Google_Service_Drive($this->client);
$folderId = "FolderIdFromGoogleDrive";
$this->report = "";
foreach ($filesToSend as $file) {
$this->report .= $this->uploadFile($file, $folderID, $service);
}
}
else {
$redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/googleapi/oauth2callback.php';
header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}
}
function uploadFile($fileName, $folderID, Google_Service_Drive $driveService) {
$fileMetadata = new Google_Service_Drive_DriveFile(array(
'name' => $fileName,
'parents' => array($folderId)
));
try {
$content = file_get_contents($fileName);
$file = $driveService->files->create($fileMetadata, array(
'data' => $content,
'mimeType' => 'application/x-gzip',
'uploadType' => 'multipart',
'fields' => 'id'));
return "File '$fileName' uploaded with id '$file->id'" . PHP_EOL;
}
catch (Exception $exc) {
return "Error working with file '$fileName':" . $exc->getMessage();
}
}
}
How can i fix it?
Make sure you have valid Permissions for the file. You must set the Permission role to "owner" and the role to user (as you are the one doing the uploading).
You can read more on this on About Permissions