通过API将文件复制到Google Drive失败

1szpjjfi  于 2023-11-14  发布在  Go
关注(0)|答案(1)|浏览(102)

我尝试将文件上传到Google云端硬盘,但失败了。我认为我已经正确指定了MIME类型,因为我已经看到这是一个常见的问题,但它仍然不适合我。
关于转换系统:我有一个API与Gin-Gonic(v1.9.1),我上传一个文件。该文件是成功地从前端/ Postman 传递到API,因为我可以成功地保存我从API获得的文件。
我得到的错误是:
Post“https://www.googleapis.com/upload/drive/v3/files?alt=json&prettyPrint=false&uploadType=multipart“:Post“":不支持的协议方案“”
我有以下功能:

  1. func (c *Client) UploadFile(oauthTokenConfig GoogleOauthTokenConfig, parentFolderId string, fileHeader *multipart.FileHeader) (*string, error) {
  2. svc, err := drive.NewService(context.Background(), option.WithHTTPClient(
  3. oauthTokenConfig.Config.Client(
  4. context.Background(),
  5. &oauth2.Token{
  6. AccessToken: oauthTokenConfig.AccessToken,
  7. TokenType: oauthTokenConfig.TokenType,
  8. RefreshToken: oauthTokenConfig.RefreshToken,
  9. Expiry: oauthTokenConfig.ExpiresIn,
  10. },
  11. )),
  12. )
  13. if err != nil {
  14. return nil, err
  15. }
  16. fileExtension := filepath.Ext(fileHeader.Filename)
  17. fileName := strings.TrimSuffix(fileHeader.Filename, fileExtension)
  18. fileMimeType := fileHeader.Header.Get("Content-Type")
  19. uploadFileMetaData := drive.File{
  20. Name: fmt.Sprintf("%s%s", fileName, fileExtension),
  21. // fmt.Sprintf("%s_%s%s", fileName, uuid.New().String(), fileExtension),
  22. Parents: []string{parentFolderId},
  23. MimeType: fileMimeType,
  24. }
  25. file, err := fileHeader.Open()
  26. if err != nil {
  27. return nil, err
  28. }
  29. defer file.Close()
  30. fileResult, err := svc.Files.
  31. Create(&uploadFileMetaData).
  32. Media(file, googleapi.ContentType("text/plain")).
  33. Do()
  34. if err != nil {
  35. return nil, err // here I get the error
  36. }
  37. // ...
  38. }

字符集
我在这里添加了MIME类型硬编码,但变量fileMimeType实际上是正确的。我上传了一个内容为Test1的Test.txt文件(当我通过Frontend/Postman发送文件时,该文件也成功创建)。我还尝试动态指定文件MIME类型或根本不指定MIME类型,但结果总是相同。
为此,我使用以下包:

  • 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

编辑:
我也复制了official example from Google,它仍然不工作。

o75abkj4

o75abkj41#

看起来错误是在认证中。从这个错误中推断出无效的认证有点困难,但我不得不修改刷新算法以使其工作。

相关问题