Inhaltsverzeichnis
Frageninhalt
Problemumgehung
Heim Backend-Entwicklung Golang Das Hochladen der Datei auf Google Drive über die API schlägt fehl

Das Hochladen der Datei auf Google Drive über die API schlägt fehl

Feb 09, 2024 pm 01:30 PM
网络问题

通过 API 将文件上传到 Google Drive 失败

php-Editor Xigua teilt Ihnen mit, dass es manchmal zu Fehlern kommen kann, wenn wir die API zum Hochladen von Dateien auf Google Drive verwenden. Diese Situation kann verschiedene Ursachen haben, z. B. Netzwerkprobleme, unzureichende Berechtigungen usw. Aber keine Sorge, wir können einiges tun, um dieses Problem zu beheben. Als Nächstes stellen wir Ihnen im Detail vor, wie Sie Dateien über die API erfolgreich auf Google Drive hochladen, damit sich niemand mehr um dieses Problem kümmern muss.

Frageninhalt

Ich versuche, eine Datei auf mein Google Drive hochzuladen, aber es schlägt fehl. Ich dachte, ich hätte den MIME-Typ richtig angegeben, weil ich festgestellt habe, dass dies ein häufiges Problem ist, aber es funktioniert bei mir immer noch nicht.

Über das Konvertierungssystem: Ich habe eine API für Gin-Gonic (v1.9.1), über die ich Dateien hochladen kann. Die Datei wurde erfolgreich vom Frontend/Postboten an die API übergeben, da ich die von der API erhaltene Datei erfolgreich speichern kann.

Der Fehler, den ich erhalte, ist:

Post "https://www.googleapis.com/upload/drive/v3/files?alt=json&prettyPrint=false&uploadType=multipart": Post "": unsupported protocol scheme ""
Nach dem Login kopieren

Ich habe folgende Funktion:

func (c *Client) UploadFile(oauthTokenConfig GoogleOauthTokenConfig, parentFolderId string, fileHeader *multipart.FileHeader) (*string, error) {
    svc, err := drive.NewService(context.Background(), option.WithHTTPClient(
        oauthTokenConfig.Config.Client(
            context.Background(),
            &oauth2.Token{
                AccessToken:  oauthTokenConfig.AccessToken,
                TokenType:    oauthTokenConfig.TokenType,
                RefreshToken: oauthTokenConfig.RefreshToken,
                Expiry:       oauthTokenConfig.ExpiresIn,
            },
        )),
    )
    if err != nil {
        return nil, err
    }

    fileExtension := filepath.Ext(fileHeader.Filename)
    fileName := strings.TrimSuffix(fileHeader.Filename, fileExtension)
    fileMimeType := fileHeader.Header.Get("Content-Type")
    uploadFileMetaData := drive.File{
        Name:     fmt.Sprintf("%s%s", fileName, fileExtension), 
                // fmt.Sprintf("%s_%s%s", fileName, uuid.New().String(), fileExtension),
        Parents:  []string{parentFolderId},
        MimeType: fileMimeType,
    }

    file, err := fileHeader.Open()
    if err != nil {
        return nil, err
    }
    defer file.Close()

    fileResult, err := svc.Files.
        Create(&uploadFileMetaData).
        Media(file, googleapi.ContentType("text/plain")).
        Do()
    if err != nil {
        return nil, err // here I get the error
    }

        // ...

}
Nach dem Login kopieren

Ich habe hier einen hartcodierten MIME-Typ hinzugefügt, aber die Variable fileMimeType ist tatsächlich korrekt. Ich habe eine Test.txt-Datei hochgeladen, die den Inhalt von Test1 enthält (die auch erfolgreich erstellt wurde, als ich sie über Frontend/Postman verschickte). Ich habe auch versucht, den Datei-MIME-Typ dynamisch anzugeben oder den MIME-Typ überhaupt nicht anzugeben, erhalte aber immer das gleiche Ergebnis.

<小时/>

Ich verwende hierfür folgende Pakete:

  • Go-Version: go1.21.1 darwin/arm64
  • go list -m golang.org/x/oauth2: v0.13.0
  • go list -m google.golang.org/api: v0.147.0
    • google.golang.org/api/drive/v3
    • google.golang.org/api/googleapi
    • google.golang.org/api/option

Herausgeber:

Ich habe auch das offizielle Beispiel von Google kopiert, aber es funktioniert immer noch nicht.

Problemumgehung

Der Fehler scheint mit der Authentifizierung zusammenzuhängen. Es ist etwas schwierig, aus diesem Fehler die ungültige Authentifizierung abzuleiten, aber ich musste den Aktualisierungsalgorithmus für das Aktualisierungstoken ein wenig ändern, damit es funktioniert.

<小时/>

Das ist mein Arbeitscode. Beachten Sie, dass Sie vor dem Aufruf von UploadFile() 函数之前,我首先检查 oauthTokenConfig.ExpiresIn prüfen, ob das Token noch gültig ist. Wenn ja, laden Sie die Datei hoch, andernfalls aktualisiere ich zuerst das Token.

Datei-Upload

func (c *Client) UploadFile(oauthTokenConfig GoogleOauthTokenConfig, parentFolderId string, file *multipart.FileHeader) (*string, error) {
    svc, err := drive.NewService(context.Background(), option.WithHTTPClient(
        oauthTokenConfig.Config.Client(
            context.Background(),
            &oauth2.Token{
                AccessToken:  oauthTokenConfig.AccessToken,
                TokenType:    oauthTokenConfig.TokenType,
                RefreshToken: oauthTokenConfig.RefreshToken,
                Expiry:       oauthTokenConfig.ExpiresIn,
            },
        )),
    )
    if err != nil {
        return nil, fmt.Errorf("failed to create drive-service: %s", err.Error())
    }

    fileExtension := filepath.Ext(file.Filename)
    fileName := strings.TrimSuffix(file.Filename, fileExtension)
    uploadFile := drive.File{
        Name:    fmt.Sprintf("%s_%s%s", fileName, uuid.New().String(), fileExtension),
        Parents: []string{parentFolderId},
    }
    fileContent, err := file.Open()
    if err != nil {
        return nil, fmt.Errorf("failed to open file: %s", err.Error())
    }

    fileResult, err := svc.Files.Create(&uploadFile).Media(fileContent).Do()
    if err != nil {
        return nil, fmt.Errorf("failed to create file: %s", err.Error())
    }

    uploadedFile, err := svc.Files.Get(fileResult.Id).Fields("webViewLink").Do()
    if err != nil {
        return nil, fmt.Errorf("failed to get file: %s", err.Error())
    }
    return &uploadedFile.WebViewLink, nil
}
Nach dem Login kopieren

Aktualisierungstoken

func (c *Client) RefreshToken(oauthTokenConfig GoogleOauthTokenConfig) (*GoogleOauthTokenConfig, error) {
    ctx := context.Background()
    config := oauth2.Config{
        ClientID:     c.ClientId,
        ClientSecret: c.ClientSecret,
        RedirectURL:  oauthTokenConfig.Config.RedirectURL,
        Scopes:       []string{"https://www.googleapis.com/auth/drive"},
        Endpoint:     google.Endpoint,
    }

    token := &oauth2.Token{
        AccessToken:  oauthTokenConfig.AccessToken,
        TokenType:    oauthTokenConfig.TokenType,
        RefreshToken: oauthTokenConfig.RefreshToken,
        Expiry:       oauthTokenConfig.ExpiresIn,
    }

    tokenSource := config.TokenSource(ctx, token)

    updatedToken, err := tokenSource.Token()
    if err != nil {
        return nil, err
    }

    return &GoogleOauthTokenConfig{
        Config:       config,
        AccessToken:  updatedToken.AccessToken,
        RefreshToken: updatedToken.RefreshToken,
        ExpiresIn:    updatedToken.Expiry,
        TokenType:    updatedToken.TokenType,
    }, nil
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDas Hochladen der Datei auf Google Drive über die API schlägt fehl. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So überprüfen Sie das Standard-Gateway auf Ihrem Mobiltelefon (Das Standard-Gateway Ihres Mobiltelefons ist leicht zu verstehen und einzustellen) So überprüfen Sie das Standard-Gateway auf Ihrem Mobiltelefon (Das Standard-Gateway Ihres Mobiltelefons ist leicht zu verstehen und einzustellen) May 06, 2024 pm 06:28 PM

Um Netzwerkeinstellungen und Fehlerbehebung durchzuführen, müssen wir bei der Verwendung von Mobiltelefonen für den Zugriff auf das Internet häufig das Standard-Gateway des Mobiltelefons kennen. Und um den Lesern das Verständnis relevanter Kenntnisse und Vorgänge zu erleichtern, wird in diesem Artikel erläutert, wie das Standard-Gateway auf dem Mobiltelefon überprüft wird. 1. Was ist das Standard-Gateway? Es ist für das Senden von Datenpaketen vom lokalen Netzwerk an das Zielnetzwerk oder -gerät verantwortlich. Das Standard-Gateway ist der Kanal, der das lokale Netzwerk mit dem externen Netzwerk verbindet. 2. Die Bedeutung des Standard-Gateways bestimmt, wie Datenpakete das Mobiltelefon betreten und verlassen. Die Rolle des Standard-Gateways auf dem Mobiltelefon ähnelt der Tür eines Hauses. 3. Öffnen Sie die Telefoneinstellungen, suchen Sie auf dem Startbildschirm des Telefons nach „Einstellungen“ und klicken Sie, um die Einstellungsseite und das Anwendungssymbol aufzurufen. 4. Rufen Sie den Schiebebildschirm für die Netzwerkeinstellungen auf und klicken Sie auf der Einstellungsseite auf „Netzwerk und Internet“, um die Option aufzurufen. 5.

Gründe, warum der Download von Baidu Netdisk fehlgeschlagen ist: 125201 Gründe, warum der Download von Baidu Netdisk fehlgeschlagen ist: 125201 Apr 30, 2024 pm 10:42 PM

Baidu Netdisk-Download fehlgeschlagen 125201 Fehlergrund: Netzwerkprobleme: instabile/langsame Verbindung, Routerfehler, ausgelasteter Server Dateiprobleme: beschädigte/unvollständige Dateien, ungültige Links Baidu Netdisk-Einschränkungen: Download-Limit überschritten, Mitgliedschaft abgelaufen/Konto eingeschränkt. Browser-/Anwendungsprobleme: aus -aktuelle Version/schlechte Kompatibilität, Download-Manager-Fehler. Systemprobleme: Viren/Malware, fehlende Komponenten/Treiber

Warum kann ich die von anderen auf Kuaishou geposteten Links nicht sehen? Warum kann ich die von anderen auf Kuaishou geposteten Links nicht sehen? May 01, 2024 am 12:39 AM

Die Gründe, warum Sie den Link auf Kuaishou nicht sehen können, können sein: Inhaltsverstöße, geografische Einschränkungen, Netzwerkprobleme, Browsereinstellungen, abgelaufene Links, unzureichende Berechtigungen oder technische Fehler. Zu den Lösungen gehören: Überprüfen Sie das Netzwerk, deaktivieren Sie Werbeblocker, ändern Sie die Zugriffsgeräte, kontaktieren Sie den Herausgeber, wenden Sie sich an den Administrator oder warten Sie, bis die Plattform repariert ist.

Die Datenressource von King of Glory ist beschädigt. Sie müssen den Client neu starten, um die Ressource zu reparieren Die Datenressource von King of Glory ist beschädigt. Sie müssen den Client neu starten, um die Ressource zu reparieren May 05, 2024 pm 03:40 PM

Nach dem King of Glory-Update wurden einige Spieler nach dem Betreten des Spiels ausgeschlossen. Ich weiß nicht, was passiert ist und wie man das Problem löst. Der Editor unten zeigt, dass die King of Glory-Datenressourcen beschädigt sind und Sie den Client neu starten müssen um die Ressourcen zu reparieren. Die Datenressourcen von Honor of Kings sind beschädigt. Sie müssen den Client neu starten, um dieses Problem zu lösen. Der erste Grund ist, dass die Version nicht vollständig aktualisiert wurde ein Spielfehler und der dritte könnte ein Netzwerkproblem sein. 1. Grund 1: Problem mit der Versionsaktualisierung. Wenn jedes Update abgeschlossen ist, deinstallieren Sie zuerst das Spiel und aktualisieren Sie dann die Vollversion erneut. 2. Grund 2: Spielfehler, die nach der Aktualisierung des Spiels auftreten. In diesem Fall können sie nur über die offizielle Website behoben werden.

Was tun, wenn bei Eureka Exchange ein Netzwerkfehler auftritt? Was tun, wenn bei Eureka Exchange ein Netzwerkfehler auftritt? Jul 17, 2024 pm 04:25 PM

Wenn ein Fehler im Netzwerk der EEX-Börse auftritt, können Sie ihn mit den folgenden Schritten beheben: Überprüfen Sie Ihre Internetverbindung. Browser-Cache leeren. Versuchen Sie es mit einem anderen Browser. Deaktivieren Sie Browser-Plugins. Kontaktieren Sie den Ouyi-Kundendienst.

So lösen Sie das Problem des langsamen Downloads der mobilen Baidu-Netzwerkfestplatte So lösen Sie das Problem des langsamen Downloads der mobilen Baidu-Netzwerkfestplatte Apr 30, 2024 pm 09:27 PM

Zu den Gründen für die langsame Download-Geschwindigkeit der mobilen Baidu Netdisk gehören: Netzwerkinstabilität, Serverüberlastung, Download-Einschränkungen, Software-Abfangen, unzureichender Speicher, niedrige Version und schlechte Gerätekompatibilität.

Warum kann ich mich nicht bei okx anmelden? Warum kann ich mich nicht bei okx anmelden? Jul 10, 2024 pm 05:33 PM

Zu den Gründen, warum sich OKX nicht anmelden kann, und seinen Lösungen gehören: Überprüfen Sie, ob die Netzwerkverbindung stabil ist, und versuchen Sie, zu einem anderen Netzwerk zu wechseln. Stellen Sie sicher, dass Benutzername und Passwort korrekt sind. Das Konto wurde möglicherweise aufgrund mehrfacher falscher Passworteingaben gesperrt. Bitte warten Sie eine gewisse Zeit, bevor Sie versuchen, sich erneut anzumelden. Leeren Sie den Cache und die Cookies Ihres Browsers und versuchen Sie, sich mit einem anderen Browser anzumelden. Möglicherweise werden an der Website Wartungsarbeiten durchgeführt. Bitte warten Sie, bis die Wartungsarbeiten abgeschlossen sind, und versuchen Sie es erneut. Konten können aufgrund von Verstößen gegen die Nutzungsbedingungen gesperrt oder deaktiviert werden. Bitte wenden Sie sich an den Kundendienst, um dies herauszufinden. Stellen Sie sicher, dass das Gerät die von OKX unterstützten Betriebssystem- und Geräteanforderungen erfüllt.

Warum kann ich mich nicht bei der Bitget Wallet-Börse registrieren? Warum kann ich mich nicht bei der Bitget Wallet-Börse registrieren? Sep 06, 2024 pm 03:34 PM

Es gibt verschiedene Gründe dafür, dass Sie sich nicht für die BitgetWallet-Börse registrieren können, darunter Kontobeschränkungen, nicht unterstützte Regionen, Netzwerkprobleme, Systemwartung und technische Ausfälle. Um sich für die BitgetWallet-Börse zu registrieren, besuchen Sie bitte die offizielle Website, geben Sie die Informationen ein, stimmen Sie den Bedingungen zu, schließen Sie die Registrierung ab und bestätigen Sie Ihre Identität.

See all articles