如何使用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
相关产品推荐
相关产品推荐

