通过 API 将文件上传到 google 云端硬盘失败

问题描述 投票:0回答:1

我正在尝试将文件上传到我的 Google 云端硬盘,但失败了。我认为我已经正确指定了 MIME 类型,因为我发现这是一个常见问题,但它仍然对我不起作用。

关于转换系统:我有一个 Gin-Gonic (v1.9.1) 的 API,我可以在其中上传文件。文件已成功从前端/邮递员传递到 API,因为我可以成功保存从 API 获取的文件。

我得到的错误是:

发布“https://www.googleapis.com/upload/drive/v3/files?alt=json&prettyPrint=false&uploadType=multipart”:发布“”:不支持的协议方案“”

我有以下功能:

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
    }

        // ...

}

我在这里添加了硬编码的 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

编辑:

我也复制了Google的官方示例,但还是不行。

go google-drive-api mime-types
1个回答
-1
投票

看起来错误是在身份验证中。从这个错误中推断出无效的身份验证有点困难,但我必须稍微修改一下刷新算法才能使其工作。

© www.soinside.com 2019 - 2024. All rights reserved.