Muat naik fail ke Google Drive melalui API gagal
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 ""
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 } // ... }
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 }
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 }
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



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.

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.

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.

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.

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.

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;

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.

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.
