0

0

C#文件上传到SharePoint C#如何使用CSOM或Graph API上传文档

月夜之吻

月夜之吻

发布时间:2026-03-01 07:45:16

|

663人浏览过

|

来源于php中文网

原创

csom适用于.net framework环境且需app-only权限的后台上传,须注册app获取clientid/secret并用tokenhelper认证;graph api适合.net core+msal场景,小文件≤4mb用put,大文件需createuploadsession分块上传。

c#文件上传到sharepoint c#如何使用csom或graph api上传文档

CSOM上传文件到SharePoint文档库(.NET Framework 4.7.2+)

CSOM适合已部署在Windows Server或传统.NET Framework环境、且有SharePoint Online管理员权限配置App-Only访问的场景。它不依赖用户登录态,适合后台服务调用。

关键点:必须先注册SharePoint App并获取ClientIdClientSecret,再用SharePointOnlineCredentials或更安全的ClientContext + TokenHelper方式认证。直接传用户名密码在现代身份验证下会失败。

  • 引用NuGet包:Microsoft.SharePointOnline.CSOM(v16.1.23919.12000+)
  • 目标URL需是文档库根路径,例如:https://contoso.sharepoint.com/sites/team/Shared%20Documents
  • 上传前检查父文件夹是否存在,CSOM不会自动创建嵌套路径,context.Web.GetFolderByServerRelativeUrl()抛异常需自行捕获并递归创建
  • 大文件(>10MB)建议改用File.SaveBinaryDirect()或分块上传(StartUpload/ContinueUpload/FinishUpload),否则易超时
var ctx = new ClientContext("https://contoso.sharepoint.com/sites/team");
ctx.Credentials = new SharePointOnlineCredentials("user@contoso.com", securePassword);
var fileCreationInfo = new FileCreationInformation
{
    Content = File.ReadAllBytes(@"C:\temp\report.pdf"),
    Url = "report.pdf",
    Overwrite = true
};
var docs = ctx.Web.Lists.GetByTitle("Shared Documents");
var uploadFile = docs.RootFolder.Files.Add(fileCreationInfo);
ctx.Load(uploadFile);
ctx.ExecuteQuery();

Graph API上传小文件(≤4MB)到SharePoint文档库

Graph API更适合.NET Core/.NET 5+项目,且已有Azure AD应用注册(类型为“Web”)、已授Files.ReadWrite.AllSites.Write.All权限。它统一了OneDrive和SharePoint的文件操作语义。

注意:Graph不直接暴露“文档库路径”,而是通过siteId + driveId定位——driveId对应文档库,需先用/sites/{site-id}/drives查出目标文档库的id,再调/drives/{drive-id}/root:/{filename}:/content上传。

Lumen5
Lumen5

一个在线视频创建平台,AI将博客文章转换成视频

下载
  • 小文件(≤4MB)用PATCH /drives/{id}/items/{item-id}/content最简;无item-id时用PUT /drives/{id}/root:/{filename}:/content
  • 必须使用HttpClient带Bearer Token请求,Token需由Microsoft.Identity.Client(MSAL)获取,不能硬编码
  • 响应状态码201 Created表示成功,404大概率是driveId错或路径中文件夹不存在(Graph不自动建中间目录)
  • 中文文件名需URL编码,否则400 Bad Request
var url = $"https://graph.microsoft.com/v1.0/drives/{driveId}/root:/report.pdf:/content";
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
var content = new ByteArrayContent(File.ReadAllBytes(@"C:\temp\report.pdf"));
content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
var resp = await client.PutAsync(url, content);

Graph分块上传大文件(>4MB)到SharePoint

超过4MB必须走createUploadSession流程,否则返回413 Payload Too Large。整个过程分三步:申请会话 → 分片上传 → 提交完成。会话有效期默认3小时,但每片上传后需更新过期时间。

容易漏掉的细节:每次PUT分片必须带Content-Range头,格式如bytes 0-1048575/5242880,且最后一片的range末尾值必须等于总大小减一;若某片失败,需重传该片,不能跳过。

  • 第一步:POST /drives/{id}/root:/{filename}:/createUploadSession,Body为空或含{"item": {"@microsoft.graph.conflictBehavior": "replace"}}
  • 第二步:对返回的uploadUrlPUT,Header加Content-RangeContent-Length,Body为当前分片字节
  • 第三步:最后一次PUT成功后,Graph自动返回完整driveItem对象,无需额外提交
  • .NET中推荐用Stream分段读取本地文件,避免File.ReadAllBytes()爆内存

CSOM vs Graph:选哪个?关键看这三点

没有绝对优劣,取决于你的运行环境、权限模型和文件大小分布。

  • 用CSOM:已有SharePoint App ID/Secret、服务长期运行、需上传>100MB文件(CSOM分块API更稳定)、或必须兼容SharePoint Server 2019(Graph不支持)
  • 用Graph:项目基于.NET Core、已用MSAL做统一认证、需同时操作OneDrive和SharePoint、或前端已调Graph(后端复用Token逻辑)
  • 混合用:常见于迁移场景——用Graph查元数据(快)、用CSOM传超大附件(稳)。但要注意两个API的权限粒度不同,Sites.FullControl.All不等价于CSOM的FullControl站点权限

最常被忽略的是权限同步延迟:Azure AD应用授权后,SharePoint端可能要等15分钟才生效,期间Graph返回403 Forbidden、CSOM报Access denied,别急着改代码,先等一等。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

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

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

更多
登录token无效
登录token无效

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

6486

2023.09.14

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

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

838

2023.09.14

token怎么获取
token怎么获取

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

1087

2023.12.21

token什么意思
token什么意思

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

1772

2024.03.01

length函数用法
length函数用法

length函数用于返回指定字符串的字符数或字节数。可以用于计算字符串的长度,以便在查询和处理字符串数据时进行操作和判断。 需要注意的是length函数计算的是字符串的字符数,而不是字节数。对于多字节字符集,一个字符可能由多个字节组成。因此,length函数在计算字符串长度时会将多字节字符作为一个字符来计算。更多关于length函数的用法,大家可以阅读本专题下面的文章。

952

2023.09.19

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1335

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1156

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

825

2023.08.01

Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

6

2026.02.28

热门下载

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

精品课程

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

共94课时 | 10.4万人学习

C 教程
C 教程

共75课时 | 5.1万人学习

C++教程
C++教程

共115课时 | 19.9万人学习

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

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