0

0

C# Google Drive API上传文件 C#如何将文件上传到谷歌云盘

月夜之吻

月夜之吻

发布时间:2026-02-14 08:48:10

|

853人浏览过

|

来源于php中文网

原创

google drive api v3 认证必须用 oauth 2.0,服务账号不可行;本地开发应使用“桌面应用”凭据调用 authorizeasync 启动浏览器授权并缓存 token.json,需启用 drive api、设对 redirect_uri 和作用域(如 drive.file)。

c# google drive api上传文件 c#如何将文件上传到谷歌云盘

Google Drive API v3 的认证必须用 OAuth 2.0,服务账号行不通

Google Drive API 不允许服务账号(Service Account)直接写入普通用户网盘——哪怕你用 Subject 模拟用户,也必须确保该用户已显式授权服务账号访问其 https://www.googleapis.com/auth/drive.file 或更宽权限。本地开发最稳妥的方式是用 OAuth 2.0 用户凭据:调用 GoogleWebAuthorizationBroker.AuthorizeAsync 启动本地浏览器授权流程,首次运行会生成 token.json 缓存凭据。

容易踩的坑:

  • 忘记在 Google Cloud Console 中为项目启用 Drive API(不止是创建凭据)
  • OAuth 凭据类型选成“服务账号密钥”或“API 密钥”,必须选“桌面应用”或“其他”
  • 未将 redirect_uri 设为 urn:ietf:wg:oauth:2.0:oobhttp://localhost(取决于客户端库版本)
  • 作用域写错,例如用了 drive.readonly 却想上传,应至少用 https://www.googleapis.com/auth/drive.file

上传文件需区分简单上传和分块上传

小文件(Files.Create + MediaUpload),大文件必须用分块上传(Files.Create with ResumableUpload)。C# 客户端库会自动选择,但你要主动控制 FileSizeSupportedUploadKinds 行为。

关键实操点:

  • 构造 Google.Apis.Drive.v3.Data.File 对象时,Parents 字段传 new List<string> { "folder_id" }</string> 才能指定目标文件夹;留空则上传到根目录
  • 设置 Body 后,必须调用 FilesResource.CreateRequest.UploadAsync()(不是 ExecuteAsync
  • 上传前检查 FileMetaData.MimeType,如不确定可调用 MimeMapping.GetMimeMapping("file.ext")(需引用 System.Web
  • 上传流必须是可重读的(stream.CanSeek == true),否则分块上传会失败;临时用 new MemoryStream(File.ReadAllBytes(path)) 最保险

上传后获取文件 ID 和分享链接要分两步

Files.Create 返回的 Google.Apis.Drive.v3.Data.File 对象只含基础字段(Id, Name, WebViewLink 等),但 WebViewLink 默认不可公开访问。若需外链,必须额外调用 Permissions.Create

HaloTool
HaloTool

AI工具在线集合网站

下载

常见错误场景:

  • 直接打印 file.WebViewLink,结果打开提示“您无权访问此内容”——因为权限未开放
  • 调用 Permissions.Create 时传了 type: "user" 却没填 emailAddress,应改用 type: "anyone" + role: "reader"
  • 误以为 file.Id 是短链接,实际它是长字符串 ID(如 1aBcDeFgHiJkLmNoPqRsTuVwXyZ),拼接 https://drive.google.com/file/d/{id}/view 才是标准链接

调试 403/404 错误优先查 scopes 和 folder ID 权限

上传失败时,GoogleApiException.Error.Code 为 403 多半是权限问题;404 则大概率是目标文件夹 ID 不存在或当前用户无访问权(哪怕文件夹是自己创建的,也要确认是否被移入“共享云端硬盘”且你有编辑权限)。

快速定位建议:

  • Files.List + Q = "'folder_id' in parents" 测试能否列出该文件夹下的内容
  • 捕获异常后打印 e.Error.Messagee.Error.Errors[0].Reason,常见值如 insufficientPermissionsnotFoundappNotAuthorized
  • 确认 OAuth token 缓存(token.json)未过期,且刷新逻辑已正确配置(GoogleWebAuthorizationBroker.AuthorizeAsync 内部会处理)
  • 如果上传到“共享云端硬盘”(Shared Drive),必须改用 supportsAllDrives = true 并用 corpora = "allDrives" 查询

真正麻烦的是权限继承和共享云端硬盘的混合场景——比如文件夹在共享云端硬盘里,但你的 OAuth 账号只是成员而非管理员,这时即使 ID 正确,上传也会静默失败或返回 404。这种 case 得先用 Drives.GetPermissions.List 交叉验证上下文权限,不能只盯着上传代码本身。

相关文章

谷歌浏览器
谷歌浏览器

谷歌浏览器Google Chrome是一款可让您更快速、轻松且安全地使用网络的浏览器。Google Chrome的设计超级简洁,使用起来得心应手。这里提供了谷歌浏览器纯净安装包,有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

436

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

544

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

317

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

81

2025.09.10

登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6386

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

833

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1082

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

1542

2024.03.01

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

23

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 5.1万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号