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

如何在C#控制台应用中用Graph API上传4MB以上附件

解决方案

核心问题修正

你代码里的CreateUploadSessionPostRequestBody用的是委派权限(Me路径)对应的类型,在应用权限环境下需要替换为Users路径对应的RequestBody类型,同时补充完整分块上传的逻辑。

完整修正代码

var resultdraft = await graphServiceClient.Users["xxxxxxxxx.com"].Messages.PostAsync(message);
var messageId = resultdraft.Id;

var fileInfo = new FileInfo(@"D:\downloadFiles\dfdsfdsfdscd.txt");
long fileSize = fileInfo.Length;

using var fileStreamx = System.IO.File.OpenRead(@"D:\downloadFiles\dfdsfdsfdscd.txt");

// 替换为应用权限对应的RequestBody类型
var requestBody = new Microsoft.Graph.Users.Item.Messages.Item.Attachments.CreateUploadSession.CreateUploadSessionPostRequestBody
{
    AttachmentItem = new AttachmentItem
    {
        AttachmentType = AttachmentType.File,
        Name = fileInfo.Name, // 使用实际文件名,而非硬编码
        Size = fileSize, // 使用实际文件大小,而非硬编码数值
    },
};

// 创建上传会话
var uploadSession = await graphServiceClient.Users["xxxxxxxxxx.com"].Messages[messageId].Attachments.CreateUploadSession.PostAsync(requestBody);

// 使用LargeFileUploadTask执行分块上传
var uploadTask = new LargeFileUploadTask<FileAttachment>(uploadSession, fileStreamx, fileSize);
var uploadResult = await uploadTask.UploadAsync();

if (uploadResult.UploadSucceeded)
{
    Console.WriteLine("大附件上传成功");
}
else
{
    Console.WriteLine("大附件上传失败");
}

关键说明

  • RequestBody类型替换:应用权限下必须使用Users.Item.Messages.Item.Attachments.CreateUploadSession.CreateUploadSessionPostRequestBody,而非Me路径的类型,否则会出现权限或路径不匹配的问题。
  • 分块上传逻辑:创建上传会话后,需要通过LargeFileUploadTask来完成实际的分块上传操作,这是处理大于4MB附件的必要步骤。
  • 权限要求:确保你的应用已配置Mail.ReadWrite应用权限,并且已完成管理员同意。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 12:37:19