2017-11-24 2 views
1

Ich möchte Dateien auf mein Teamdrive hochladen, aber es schlägt fehl. Upload auf mein Laufwerk funktioniert.Datei auf Teamdrives mit Drive API und PHP hochladen

Ich rufe die Funktion mit einer lokalen Datei, Array mit Ordner-ID in meinem Teamdrive und das Team Laufwerk-ID. $ service ein Google_Service_Drive Objekt und $ client ein Google_Client

Ich benutze die Option supportsTeamDrives.

Wenn ich versuche, der Listfiles Teamdrive auch nicht existieren.

Wie kann ich Teamdrives über die API in PHP zugreifen?

Diese Version funktioniert nun:

function uploadGD($local_file, $folderid = NULL, $teamdrive = NULL) 
{ 
    global $service; 
    global $client; 
    try { 

    // Call the API with the media upload, defer so it doesn't immediately return. 
     $client->setDefer(true); 
     //$request = $service->files->create($file); 

     $optParams = array(
      'fields' => 'id', 
      'supportsTeamDrives' => true, 
     ); 

      $request = $service->files->create(new Google_Service_Drive_DriveFile(array(
      "name" => basename($local_file), 
      "teamDriveId" => $teamdrive, 
      "parents" => $folderid, 
      "mimeType" => mime_content_type($local_file))), $optParams); 

     // Create a media file upload to represent our upload process. 
     $media = new Google_Http_MediaFileUpload(
      $client, 
      $request, 
      mime_content_type($local_file), 
      null, 
      true, 
      1 * 1024 * 1024 
     ); 
     $media->setFileSize(filesize($local_file)); 

     // Upload the various chunks. $status will be false until the process is 
     // complete. 
     $status = false; 
     $handle = fopen($local_file, "rb"); 
     while (!$status && !feof($handle)) { 
      $chunk = fread($handle, $chunkSizeBytes); 
      $status = $media->nextChunk($chunk); 
     } 

     // The final value of $status will be the data from the API for the object 
     // that has been uploaded. 
     $result = false; 
     if($status != false) { 
      $result = $status; 
     } 

     fclose($handle); 
     // Reset to the client to execute requests immediately in the future. 
     $client->setDefer(false); 

     return "google|" . $result["id"]; 
    } catch (Exception $e) { 
      return "Fehler:".$e->getMessage(); 
    } 

} 

Die Fehlermeldung zeigt:

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "notFound", 
    "message": "File not found: 0AHUD0ou-txfUUk9PVA.", 
    "locationType": "parameter", 
    "location": "fileId" 
    } 
    ], 
    "code": 404, 
    "message": "File not found: 0AHUD0ou-txfUUk9PVA." 
} 
} 

Antwort

1

"Datei nicht gefunden. 0AHUD0ou-txfUUk9PVA",

im Grunde bedeutet, dass Der Benutzer, mit dem Sie sich authentifizieren, hat keinen Zugriff auf die betreffende Datei kann es nicht finden. Sie sollten eine datei.list erstellen, um zu sehen, auf welche Dateien ein Benutzer Zugriff hat.

Wenn Sie mit einem Dienstkonto authentifizieren Sie müssen sicherstellen, dass das Dienstkonto hat Zugriff auf das Team-Laufwerk Konto erteilt worden ist, dann wird es in der Lage sein, die Dateien zugreifen zu können.

+0

Danke für Sie Antworten. Der Benutzer hat die Berechtigung für das Team-Laufwerk und die App verwendet Google_Service_Drive :: DRIVE (Vollzugriff) Benötigte ich andere Bereiche für Teamdrives? Der Benutzer hat vollen Zugriff auf die Team-Laufwerk – yannik995

+0

dann machen Sie eine file.list, um zu sehen, auf welche Dateien der Benutzer Zugriff hat. Wenn sie keinen Zugriff auf die fragliche Datei haben, müssen Sie ihnen Zugriff gewähren – DaImTo

+0

Wenn ich $ service-> teamdrives-> listTeamdrives verwende (ich bekomme alle Teamdrives. Ich bin der Ersteller der Teamdrives, also habe ich Fullaccess – yannik995

Verwandte Themen