2016-04-21 17 views
0

EDIT: Beim Kopieren von Dateien, die das Dienstkonto über die API erstellt hat, wird die Kopie ausgeführt, aber dieser Fehler bleibt bestehen und die Datei-ID im Fehler entspricht der Kopie. Wenn das Kopieren einer Datei das Dienstkonto nicht besitzt (aber Bearbeitungszugriff hat), tritt die Kopie nicht auf und die Datei-ID in dem Fehler ist für die ursprüngliche Datei.Google Drive API: Datei mit Dienstkonto kopieren

Das Dienstkonto scheint keine Sichtbarkeit außerhalb von Dateien zu haben, die es über die API erstellt hat, und hat keine Sichtbarkeit für Kopien dieser Dateien.

= - = - = - = - = - = - = - = - = - = - = - = - = -

ich die gleichen Fehler wie diese Frage bekommen: Google Drive API copy() - 404 error außer meinem Setup ist ein etwas anders.

Erstellen von Dateien funktioniert gut.

Ich versuche, Dokumente über eine Kopie zu erstellen, die nicht von Benutzern gehört werden, aber immer noch Lese/Schreib/kein Download-Zugriff geben. Ich werde mich freuen, wenn es nur für den Moment kopiert. Hier

ist der Code:

$service = GoogleDrive::connect(); 

    $copy = new \Google_Service_Drive_DriveFile(); 
    $copy->setTitle($documentName); 

    try { 
     $createdFile = $service->files->copy($source_id, $copy); 
    } catch (\Exception $e) { 
     print "An error occurred: " . $e->getMessage(); 
    } 

Und die Ausgabe:

An error occurred: Error calling POST https://www.googleapis.com/drive/v2/files/1RXglHS8P4Klcn28WTsf-QHj9BuBIV0AY3R6PeJitqcM/copy: (404) File not found: 1PKaE72BI0ux3uAv3vCKv4pAT_jsxhJ5uZOY0F1sEcNw 

Es scheint, als gäbe es ein Problem mit Berechtigungen für die Zieldatei? Wie kann ich überprüfen, ob ein Berechtigungs- oder Authentifizierungsproblem vorliegt? Ich bin mit OAuth eingeloggt. Hier

ist der Client-Verbindungscode:

static public function connect() 
{ 
    self::$shared_folder = config('google.SharedFolder'); 

    $client_email = config('google.ServiceAccountEmail'); 

    // See if we need to recreate the client 
    if (!GoogleDrive::$client) { 

     $private_key = file_get_contents(config('google.ServiceAccountKeyFile')); 

     GoogleDrive::$client = new \Google_Client(); 

     GoogleDrive::$client->setApplicationName(GoogleDrive::$app_name); 
     $credentials = new \Google_Auth_AssertionCredentials(
      $client_email, 
      GoogleDrive::$scope, 
      $private_key 
     ); 
     GoogleDrive::$client->setAssertionCredentials($credentials); 
    } 

    // Always see if the token is expired 
    if (GoogleDrive::$client->getAuth()->isAccessTokenExpired()) { 
     GoogleDrive::$client->getAuth()->refreshTokenWithAssertion(); 
    } 

    $_SESSION['service_token'] = GoogleDrive::$client->getAccessToken(); 

    return new \Google_Service_Drive(GoogleDrive::$client); 
} 

Antwort

0

keine vollständige Antwort, aber am Ende haben wir ein reguläres Konto in der Domäne verwenden und zu speichern ihre Token-Dateien zu kopieren. Wir konnten das Dienstkontenlaufwerk nicht zum Speichern und Kopieren von Dateien verwenden. Wir konnten Benutzern auch keine Berechtigungen für Dateien auf dem Dienstkontenlaufwerk erteilen. Wir haben sogar versucht, Dokumente in einem normalen Benutzer mit dem Dienstkonto als Besitzer zu erstellen, aber Kopien und Berechtigungen fehlgeschlagen. Wir waren in der Lage, Dateien ordnungsgemäß mit dem Dienstkonto als Besitzer zu erstellen, aber anscheinend vermissen wir etwas oder machen etwas, was nicht erlaubt ist.

Verwandte Themen