2016-07-27 37 views
11

Próbuję utworzyć folder za pomocą apletu google drive. Na końcu mogę uzyskać identyfikator pliku. ale nie jestem w stanie do mojego folderu na dysku google. wydaje się, że masz problem z pozwoleniem?Nie widzę plików i folderów utworzonych za pomocą interfejsu API na moim Dysku Google przy użyciu php

$scopes = array(
    'https://www.googleapis.com/auth/drive', 
    'https://www.googleapis.com/auth/drive.appdata','https://www.googleapis.com/auth/drive.apps.readonly', 
    'https://www.googleapis.com/auth/drive.metadata','https://www.googleapis.com/auth/drive.file', 
    'https://www.googleapis.com/auth/drive.readonly','https://www.googleapis.com/auth/drive.photos.readonly' 
); 
$creds = new Google_Auth_AssertionCredentials(
    $serviceAccountName, 
    $scopes, 
    file_get_contents($keyFile) 
); 
$client = new Google_Client(); 
$client->setApplicationName($appName); 
$client->setClientId($clientId); 
$client->setAssertionCredentials($creds); 
$service = new Google_Service_Drive($client); 
$fileMetadata = new Google_Service_Drive_DriveFile(array(
    'name' => 'Invoices', 
    'permissions' => array('type'=>'anyone','role'=>'reader','allowFileDiscovery'=>1), 

    'mimeType' => 'application/vnd.google-apps.folder')); 
$file = $service->files->create($fileMetadata, array()); 

printf("File ID: %s\n", $file->id); 

Odpowiedz

2

Odpowiedź Mayropa jest częściowo poprawna.

plików, które są tworzone należą do konta e-mail API (coś jak [email protected]

Trzeba dać uprawnienia do właściciela tego konta jak

$newPermission = new Google_Service_Drive_Permission(); 
$value="email id"; 
$type="user"; 
$role="writer"; 
    $newPermission->setValue($value); 
    $newPermission->setType($type); 
    $newPermission->setRole($role); 
try { 
    $res= $service->permissions->insert($fileId, $newPermission); 
    print_r($res); 
    } catch (Exception $e) { 
    print "An error occurred: " . $e->getMessage(); 
    } 

widać, że folder Udostępnione dla mnie. można również dodać ręcznie dysku.

można również wyłączyć wysyłanie powiadomienia za pośrednictwem poczty elektronicznej z wykorzystaniem

$service->permissions->insert($fileId, $newPermission,array('sendNotificationEmails'=>false)); 

Mam nadzieję, że to zadziała.

0

Tak, wydaje się, że problem uprawnień. Spróbuj usunąć

'permissions' => array('type'=>'anyone','role'=>'reader','allowFileDiscovery'=>1),

z

$fileMetadata = new Google_Service_Drive_DriveFile(array( 'name' => 'Invoices', 'permissions' => array('type'=>'anyone','role'=>'reader','allowFileDiscovery'=>1), 'mimeType' => 'application/vnd.google-apps.folder'));

3

Pliki, które są tworzone należą do wiadomości e-mail konta API (coś jak [email protected] Jeśli pójdziesz do zawartości dysku. https://docs.google.com/document/d/{ID}, ty otrzyma stronę "Odmowa uprawnień, prośba o dostęp"

E-mail konta usługi nie jest powiązany z adresem e-mail użytkownika .

Aby utworzyć pliki z użytkownikiem, należy utworzyć autoryzację tokena OAauth.

  1. utworzyć poświadczenia OAuth następujące kroki "Krok 1: Włącz API twardy" na this page

  2. zmodyfikować skrypt, naśladując w this page, można mieć:


use Google_Client; 
use Google_Service_Drive; 
use Google_Service_Drive_DriveFile; 

... 

$file = 'root/to/your/credentials.json'; 

$client = new Google_Client(); 
$client->setScopes([ 
    'https://www.googleapis.com/auth/drive', 
    'https://www.googleapis.com/auth/drive.appdata', 
    'https://www.googleapis.com/auth/drive.apps.readonly', 
    'https://www.googleapis.com/auth/drive.metadata', 
    'https://www.googleapis.com/auth/drive.file', 
    'https://www.googleapis.com/auth/drive.readonly', 
    'https://www.googleapis.com/auth/drive.photos.readonly' 
]); 

$client->setAuthConfig($file); 
$authUrl = $client->createAuthUrl(); 

printf("Open the following link in your browser:\n%s\n", $authUrl); 

// You will need to open this url 
print 'Enter verification code: '; 
$authCode = trim(fgets(STDIN)); 

$accessToken = $client->authenticate($authCode); 

file_put_contents($credentialsPath, $accessToken); 
printf("Credentials saved to %s\n", $credentialsPath); 

$client->setAccessToken(json_decode($accessToken, true)); 

$service = new Google_Service_Drive($client); 

$metadata = new Google_Service_Drive_DriveFile([ 
    'name' => 'testing drive', 
    'mimeType' => "application/vnd.google-apps.document" 
]); 
$file = $service->files->create($metadata, []); 
print_r($file); 

Plik powinien znajdować się w katalogu osobistym Twojego napędu.

Nawiasem mówiąc, proponuję wypróbować nową wersję google/apiclient:2.0.2 (która jest nadal w wersji beta, ale działa dobrze).