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);
}