Es ist eine Geschichte, wenn Sie ein freigegebenes Laufwerk mit Google Drive API V3 verwenden, da es trotz der starken Abhängigkeit nur wenige Informationen gab. Wenn ich versuche, eine Datei in einen Ordner auf dem freigegebenen Laufwerk hochzuladen und sie durch Angabe der ID des übergeordneten Ordners in "meta.Parents" zu verschieben, wird aus irgendeinem Grund der Fehler "Datei nicht gefunden [Ordner-ID] 404" angezeigt ... ・ Wenn Sie in MyDrive eine Ordner-ID angeben, bei der es sich nicht um ein freigegebenes Laufwerk handelt, ist dies erfolgreich. Daher scheint es kein Problem mit der Authentifizierung und dem Programmablauf zu geben.
Plötzlich musste ich die folgenden zwei Eigenschaften einstellen.
Die DriveId
-Eigenschaft des --meta-Objekts
Wie die ID des übergeordneten Ordners ist DriveId die letzte Zeichenfolge der URL, wenn das Stammverzeichnis des entsprechenden freigegebenen Laufwerks im Browser geöffnet wird. Es gibt auch eine Eigenschaft namens "TeamDriveId", aber Sie können DriveId anstelle von "Veraltet" verwenden.
Der Gesamtcode einschließlich Authentifizierung lautet jetzt ↓. Es ist fast eine Beispielkopie von Quick Start. (Der Code lautet C # SDK, andere SDKs sind jedoch identisch.)
GoogleDriveUploader.cs
string[] Scopes = { DriveService.Scope.DriveFile }; //DriveFile zum Hochladen
string ApplicationName = "Passender Anwendungsname";
UserCredential credential;
using (var stream = new FileStream("client_secret_~~.apps.googleusercontent.com.json", FileMode.Open, FileAccess.Read))
{
string credPath = "token.json";
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
Console.WriteLine("Credential file saved to: " + credPath);
}
// Create Drive API service.
var service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
var meta = new Google.Apis.Drive.v3.Data.File()
{
Name = "Zu erstellende Datei",
MimeType = "application/octet-stream", //Lassen Sie uns entsprechend einstellen
DriveId = "ID des freigegebenen Laufwerks(Wie 0ABcDeJiHiJKLmn23)",
Parents = new List<string> { "ID des übergeordneten Ordners(Wie 1auYhd9J9j ~)" }
};
using (var stream = new System.IO.FileStream("Vollständiger Pfad der hochzuladenden Datei", System.IO.FileMode.Open))
{
//Neuer Zusatz
var request = service.Files.Create(meta, stream, meta.MimeType);
request.Fields = "id, name";
request.SupportsAllDrives = true;
var ret = request.UploadAsync().Result;
if (ret.Status == Google.Apis.Upload.UploadStatus.Failed)
{
throw ret.Exception;
}
}
Recommended Posts