Jadual Kandungan
Kandungan soalan
Penyelesaian
Rumah pembangunan bahagian belakang Golang Muat naik fail ke Google Drive melalui API gagal

Muat naik fail ke Google Drive melalui API gagal

Feb 09, 2024 pm 01:30 PM
masalah rangkaian

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

editor php Xigua memberitahu anda bahawa kadangkala kami mungkin menghadapi kegagalan apabila menggunakan API untuk memuat naik fail ke Google Drive. Keadaan ini mungkin disebabkan oleh pelbagai sebab, seperti masalah rangkaian, kebenaran tidak mencukupi, dsb. Tetapi jangan risau, terdapat beberapa perkara yang boleh kami lakukan untuk menyelesaikan masalah ini. Seterusnya, kami akan memperkenalkan secara terperinci bagaimana untuk berjaya memuat naik fail ke Google Drive melalui API, supaya semua orang tidak lagi bimbang tentang masalah ini.

Kandungan soalan

Saya cuba memuat naik fail ke Google Drive saya tetapi ia gagal. Saya fikir saya telah menentukan jenis MIME dengan betul kerana saya mendapati ini adalah masalah biasa, tetapi ia masih tidak berfungsi untuk saya.

Mengenai sistem penukaran: Saya mempunyai API untuk Gin-Gonic (v1.9.1) tempat saya boleh memuat naik fail. Fail berjaya dihantar dari frontend/posmen ke API kerana saya berjaya menyimpan fail yang saya dapat daripada API.

Ralat yang saya dapat ialah:

Post "https://www.googleapis.com/upload/drive/v3/files?alt=json&prettyPrint=false&uploadType=multipart": Post "": unsupported protocol scheme ""
Salin selepas log masuk

Saya mempunyai fungsi berikut:

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
    }

        // ...

}
Salin selepas log masuk

Saya menambah jenis MIME kod keras di sini, tetapi pembolehubah fileMimeType sebenarnya betul. Saya memuat naik fail Test.txt yang mengandungi kandungan Test1 (yang juga berjaya dibuat apabila saya menghantarnya melalui Frontend/Postman). Saya juga telah mencuba menentukan jenis MIME fail secara dinamik atau tidak menyatakan jenis MIME sama sekali, tetapi sentiasa mendapat hasil yang sama.

<小时/>

Saya menggunakan pakej berikut untuk ini:

  • Versi Go: 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

Editor:

Saya juga menyalin contoh rasmi Google, tetapi ia masih tidak berfungsi.

Penyelesaian

Nampaknya ralat itu berkaitan dengan pengesahan. Agak sukar untuk menyimpulkan pengesahan tidak sah daripada ralat ini, tetapi saya terpaksa menukar algoritma muat semula untuk token muat semula sedikit untuk membolehkannya berfungsi.

<小时/>

Ini adalah kod kerja saya. Ambil perhatian bahawa sebelum memanggil UploadFile() 函数之前,我首先检查 oauthTokenConfig.ExpiresIn untuk melihat sama ada token masih sah, jika ya, muat naik fail, jika tidak saya muat semula token itu terlebih dahulu.

Muat naik fail

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
}
Salin selepas log masuk

Token Segarkan

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
}
Salin selepas log masuk

Atas ialah kandungan terperinci Muat naik fail ke Google Drive melalui API gagal. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apa yang perlu dilakukan jika terdapat ralat rangkaian pada Eureka Exchange Apa yang perlu dilakukan jika terdapat ralat rangkaian pada Eureka Exchange Jul 17, 2024 pm 04:25 PM

Apabila menghadapi ralat rangkaian pertukaran EEX, anda boleh mengambil langkah berikut untuk menyelesaikannya: Semak sambungan Internet anda. Kosongkan cache penyemak imbas. Cuba pelayar lain. Lumpuhkan pemalam penyemak imbas. Hubungi perkhidmatan pelanggan Ouyi.

Mengapa saya tidak boleh mendaftar di bursa Bitget Wallet? Mengapa saya tidak boleh mendaftar di bursa Bitget Wallet? Sep 06, 2024 pm 03:34 PM

Terdapat pelbagai sebab untuk tidak dapat mendaftar untuk pertukaran BitgetWallet, termasuk sekatan akaun, wilayah tidak disokong, isu rangkaian, penyelenggaraan sistem dan kegagalan teknikal. Untuk mendaftar untuk pertukaran BitgetWallet, sila lawati laman web rasmi, isi maklumat, bersetuju dengan syarat, lengkapkan pendaftaran dan sahkan identiti anda.

Mengapa saya tidak boleh log masuk ke okx? Mengapa saya tidak boleh log masuk ke okx? Jul 10, 2024 pm 05:33 PM

Sebab OKX tidak boleh log masuk dan penyelesaiannya termasuk: semak sama ada sambungan rangkaian stabil dan cuba tukar ke rangkaian lain. Pastikan nama pengguna dan kata laluan adalah betul. Akaun mungkin dikunci kerana berbilang entri kata laluan yang salah Sila tunggu beberapa ketika sebelum cuba log masuk semula. Kosongkan cache dan kuki penyemak imbas anda dan cuba log masuk dengan penyemak imbas lain. Tapak web mungkin dalam penyelenggaraan, sila tunggu sehingga penyelenggaraan selesai dan cuba lagi. Akaun mungkin dibekukan atau dilumpuhkan kerana melanggar syarat, sila hubungi perkhidmatan pelanggan untuk mengetahui. Pastikan peranti memenuhi keperluan sistem pengendalian dan peranti yang disokong OKX.

Mengapa saya tidak boleh log masuk ke laman web rasmi MEXC (Matcha)? Mengapa saya tidak boleh log masuk ke laman web rasmi MEXC (Matcha)? Dec 07, 2024 am 10:50 AM

Sebab tidak dapat log masuk ke laman web MEXC (Matcha) mungkin masalah rangkaian, penyelenggaraan laman web, masalah penyemak imbas, masalah akaun atau sebab lain. Langkah penyelesaian termasuk menyemak sambungan rangkaian anda, menyemak pengumuman tapak web, mengemas kini penyemak imbas anda, menyemak kelayakan log masuk anda dan menghubungi perkhidmatan pelanggan.

Tidak boleh menerima kod pengesahan semasa log masuk dengan okx Tidak boleh menerima kod pengesahan semasa log masuk dengan okx Jul 23, 2024 pm 10:43 PM

Sebab mengapa anda tidak boleh menerima kod pengesahan semasa log masuk ke OKX termasuk: masalah rangkaian, masalah tetapan telefon mudah alih, gangguan perkhidmatan SMS, pelayan sibuk dan sekatan permintaan kod pengesahan. Penyelesaiannya ialah: tunggu untuk mencuba lagi, tukar rangkaian dan hubungi perkhidmatan pelanggan.

aplikasi pertukaran okx tidak boleh dibuka aplikasi pertukaran okx tidak boleh dibuka Jul 11, 2024 pm 04:34 PM

Sebab mengapa aplikasi OKX tidak boleh dibuka mungkin disebabkan oleh: masalah rangkaian, aplikasi usang, penyelenggaraan pelayan, gangguan sementara, isu peranti, sekatan wilayah atau isu keselamatan. Cadangan penyelesaian masalah: 1. Semak sambungan rangkaian; 3. Semak status pelayan; 5. Mulakan semula peranti;

Tidak dapat log masuk ke akaun OEX Tidak dapat log masuk ke akaun OEX Jul 11, 2024 pm 05:30 PM

Sebab mengapa anda tidak boleh log masuk ke akaun OEX anda termasuk masalah rangkaian, ralat input, akaun membeku dan masalah peralatan. Penyelesaian termasuk mengosongkan cache penyemak imbas anda, menetapkan semula kata laluan anda dan menghubungi perkhidmatan pelanggan.

Apakah sebab keabnormalan rangkaian Okx? Apakah sebab keabnormalan rangkaian Okx? Jul 11, 2024 pm 04:18 PM

Sebab-sebab keabnormalan rangkaian OKX termasuk: 1. Kesesakan rangkaian 2. Kegagalan peralatan 3. Masalah sambungan Internet 4. Sekatan geografi 5. Penyelenggaraan atau naik taraf 6. Aktiviti berniat jahat 7. Sebab-sebab lain.

See all articles