iis服务器助手广告
返回顶部
首页 > 资讯 > 精选 >通过 API 将文件上传到 Google Drive 失败
  • 702
分享到

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

网络问题 2024-02-09 13:02:16 702人浏览 泡泡鱼
摘要

PHP小编西瓜告诉大家,有时候我们在使用 api 将文件上传到 Google Drive 的过程中可能会遇到失败的情况。这种情况可能是由于各种原因引起的,比如网络问题、权限不足等等。不

PHP小编西瓜告诉大家,有时候我们在使用 api 将文件上传到 Google Drive 的过程中可能会遇到失败的情况。这种情况可能是由于各种原因引起的,比如网络问题、权限不足等等。不过,不用担心,我们可以采取一些措施来解决这个问题。接下来,我们将会详细介绍如何通过 API 将文件成功上传到 Google Drive,让大家不再为这个问题烦恼。

问题内容

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

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

我得到的错误是:


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

我有以下功能:

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官方的例子,还是不行。

解决方法

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

<小时/>

这是我的工作代码。请注意,在调用 UploadFile() 函数之前,我首先检查 oauthTokenConfig.ExpiresIn 来查看令牌是否仍然有效,如果是,则上传文件,否则我首先刷新令牌。

文件上传

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
}

刷新令牌

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
}

以上就是通过 API 将文件上传到 Google Drive 失败的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 通过 API 将文件上传到 Google Drive 失败

本文链接: https://www.lsjlt.com/news/562562.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 通过 API 将文件上传到 Google Drive 失败
    php小编西瓜告诉大家,有时候我们在使用 API 将文件上传到 Google Drive 的过程中可能会遇到失败的情况。这种情况可能是由于各种原因引起的,比如网络问题、权限不足等等。不...
    99+
    2024-02-09
    网络问题
  • 使用 REST API 将文件直接上传到 Google 存储桶
    问题内容 按照 go 示例,我使用以下代码将文件上传到 google 存储桶: func uploadFile(bucket string, uploadFilePath string...
    99+
    2024-02-06
    lol
  • 使用golang上传文件到SFTP主机失败
    欢迎各位小伙伴来到编程网,相聚于此都是缘哈哈哈!今天我给大家带来《使用golang上传文件到SFTP主机失败》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以...
    99+
    2024-04-04
  • php上传文件为什么失败
    这篇文章主要介绍了php上传文件为什么失败,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。文件限制调的太小:upload_max_filesi...
    99+
    2024-04-02
  • 云服务器上传文件失败
    检查服务器配置 确保云服务器的服务器配置符合你的需求。例如,如果你使用的是VMware虚拟化环境,则需要确保服务器操作系统是VMware Virtual Machine Edition或VMware Virtual Server Ed...
    99+
    2023-10-27
    上传文件 服务器
  • mysql上传大文件失败怎么办
    mysql上传过大导致失败的解决方法首先,在mysql安装目录中,查找到my.ini配置文件,并使用记事本打开;my.ini配置文件打开后,在文件中进行以下修改:upload_max_filesize =8M #限制上传文件的最大大小mem...
    99+
    2024-04-02
  • PHP如何通过CURL上传文件
    PHP使用CURL上传文件只需发送一个POST请求就可以了,在请求中设置某个字段为需要上传的文件全路径,并且以“@”开头,然后使用CURL把该变量以POST方式发送到服务器,在服务端即可以从超级全局变量$_FILES中取到相应的上传文件信息...
    99+
    2023-09-01
    php 服务器 开发语言
  • 如何将本地文件上传到gitlab上
    随着云计算技术的发展和普及,越来越多的软件开发项目都开始采用云端的代码管理平台来进行协作和管理。其中,GitLab因为其简单易用、功能强大等优点,成为了很多企业和开发团队的首选。但是,对于一些开发者来说,如何将本地文件上传到GitLab上还...
    99+
    2023-10-22
  • 华为云服务器上传文件失败
    检查文件权限 当上传文件失败时,首先需要检查您的文件权限。您可以在华为云上的文件上传和下载设置中进行权限设置,以确保您上传的文件仅被您授权的用户或应用程序访问。如果您上传的文件不在您的授权范围内,您可以联系华为云客服进行更改。 检查...
    99+
    2023-10-28
    华为 上传文件 服务器
  • python如何通过http上传文件
    这篇文章主要介绍“python如何通过http上传文件”,在日常操作中,相信很多人在python如何通过http上传文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python如何通过http上传文件”的疑...
    99+
    2023-06-20
  • 阿里云服务器上传文件失败
    1. 引言 在使用阿里云服务器时,有时候我们可能会遇到上传文件失败的情况。这可能会给我们的工作带来不便和困扰。本文将探讨可能导致阿里云服务器上传文件失败的原因,并提供一些解决方案。2. 原因分析2.1 网络问题阿里云服务器上传文件失败的一个...
    99+
    2024-01-20
    阿里 上传文件 服务器
  • 如何通过FTP将文件传输到阿里云服务器
    简介: 这篇文章将详细介绍如何使用FTP将文件传输到阿里云服务器,包括步骤、注意事项和常见问题解答。 正文:FTP(File TransferProtocol)是一种在Internet上传输文件的标准协议。通过FTP,用户可以将文件从一台计...
    99+
    2024-01-26
    阿里 文件传输 服务器
  • Java将文件上传到ftp服务器
    本文实例为大家分享了Java将文件上传到ftp服务器的具体代码,供大家参考,具体内容如下 首先简单介绍一下什么是FTP,以及如何在自己的电脑上搭建一个ftp服务器; —&...
    99+
    2024-04-02
  • 亚马逊云服务器上传文件失败
    1. 检查网络连接 上传文件失败可能是由于网络连接问题导致的。请确保您的网络连接稳定,并且没有任何防火墙或代理服务器阻止了上传。 2. 检查文件大小 亚马逊云服务器有文件大小限制,如果您上传的文件超过了限制,上传将会失败。请检查您要上传的...
    99+
    2023-10-27
    亚马逊 上传文件 服务器
  • idea将项目上传到Gitee的图文过程
    1.如果没有gitee账号,到gitee官网注册一个Gitee账号(注意:尽量不要有中文) 登录gitee账号(代表注册成功) 2.打开idea 3.点击file-->s...
    99+
    2024-04-02
  • 华为云服务器上传文件夹失败
    1. 确认上传文件夹路径 在上传文件夹时,首先需要确认上传路径是否正确。可以通过命令行或者图形化界面进行确认。如果路径不正确,上传文件夹就会失败。 2. 确认上传文件夹大小 上传文件夹的大小也是一个需要注意的问题。如果上传的文件夹过大,可...
    99+
    2023-10-27
    华为 文件夹 上传
  • php上传文件写入失败如何解决
    这篇文章主要讲解了“php上传文件写入失败如何解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php上传文件写入失败如何解决”吧!php上传文件写入失败是因为上传文件临时文件夹空间内存不够...
    99+
    2023-06-20
  • 怎么将文件上传到云服务器
    要将文件上传到云服务器,可以使用以下步骤:1. 确保你已经拥有一个云服务器,并且已经获得了连接服务器的相关信息,如IP地址、用户名和...
    99+
    2023-09-26
    云服务器
  • 怎么将一个文件夹上传到GitHub
    这篇文章主要介绍“怎么将一个文件夹上传到GitHub”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么将一个文件夹上传到GitHub”文章能帮助大家解决问题。步骤1:在Github上创建存储库首先,...
    99+
    2023-07-05
  • python通过http上传文件思路详解
    这里主要是解决multipart/form-data这种格式的文件上传,基本现在http协议上传文件基本上都是通过这种格式上传 1 思路 一般情况下,如果我们往一个地址上传文件,则必...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作