You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Graph SDK (.NET C#)替换OneDrive现有文件内容?

使用MS Graph SDK替换OneDrive现有文件

针对你已获取driveId和itemId的场景,分两种情况实现文件替换:

1. 小文件直接替换(≤4MB)

直接定位到目标文件的Content端点,发送PUT请求并指定冲突行为为replace即可覆盖现有文件,无需使用ItemWithPath:

// gsc为你的GraphServiceClient实例,memoryStream是新文件的流
Microsoft.Kiota.Abstractions.RequestInformation requestInformation = gsc.Drives[driveId].Items[itemId].Content.ToPutRequestInformation(memoryStream);
// 添加冲突行为参数,强制替换现有文件
requestInformation.URI = new Uri(requestInformation.URI.OriginalString + "?@microsoft.graph.conflictBehavior=replace");

var uploadResult = gsc.RequestAdapter.SendAsync<DriveItem>(requestInformation, DriveItem.CreateFromDiscriminatorValue).GetAwaiter().GetResult();

2. 大文件分块上传替换(>4MB)

若文件较大,需先创建上传会话并指定替换规则,再通过分块上传完成替换。你之前的语法错误在于CreateUploadSession对应的HTTP方法是POST,需调用PostAsync()而非PatchAsync():

// 构造上传会话请求体,设置冲突行为为替换
var uploadSessionRequestBody = new CreateUploadSessionPostRequestBody
{
    Item = new DriveItemUploadableProperties
    {
        AdditionalData = new Dictionary<string, object>
        {
            { "@microsoft.graph.conflictBehavior", "replace" }
        }
    }
};

// 创建上传会话(修正PostAsync调用)
var uploadSession = await gsc.Drives[driveId].Items[itemId].CreateUploadSession(uploadSessionRequestBody).PostAsync();

// 使用LargeFileUploadTask完成分块上传
var uploadTask = new LargeFileUploadTask<DriveItem>(
    uploadSession,
    memoryStream,
    32 * 1024 * 1024, // 32MB分块大小,可根据需求调整
    gsc.RequestAdapter);

var uploadResult = await uploadTask.UploadAsync();
if (uploadResult.UploadSucceeded)
{
    var updatedDriveItem = uploadResult.ItemResponse;
    // 处理上传成功后的逻辑
}

内容的提问来源于stack exchange,提问作者John Park

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 19:58:20