无法在SitePages列表驱动器中DrievItems上传

时间:2019-12-11 15:02:07

标签: microsoft-graph sharepoint-online azure-ad-graph-api microsoft-graph-sdks

与共享点站点中的SitePage列表关联的Drive中所有DrivesItem的上传失败。

图形API请求:

UploadSession uploadSession = GraphCLient.Sites[{SiteId}].Drives[{DriveId of SitePages List }]. Items[{DriveFolderID}].ItemWithPath(driveItem.Item.Name).CreateUploadSession().Request().PostAsync().Result;

uploadSession将成功创建,但是 chunkuploadprovider 会出错。

  

错误响应:代码:accessDenied消息:呼叫者没有   执行操作的权限。内部错误

代码段:

private void UploadItem(OneDriveJsonStructure driveItem)
        {
            try
            {
                MemoryStream memStream = (MemoryStream)driveItem.Content;
                byte[] buffer = memStream.ToArray();
                DriveItem item = null;
                using (System.IO.MemoryStream ms = new System.IO.MemoryStream(buffer))
                {

                    UploadSession uploadSession = this._SharepointOperations._GraphCLient.Sites[this._SiteId].Drives[this._DriveId].Items[this._DriveFolderId].ItemWithPath(driveItem.Item.Name).CreateUploadSession().Request().PostAsync().Result;
                    var provider = new ChunkedUploadProvider(uploadSession, this._SharepointOperations._GraphCLient, memStream);
                    var chunkRequests = provider.GetUploadChunkRequests();
                    var readBuffer = new byte[buffer.Length];
                    var trackedExceptions = new List<Exception>();
                    DriveItem itemResult = null;

                    foreach (var request in chunkRequests)
                    {
                        // Send chunk request
                        var result = provider.GetChunkRequestResponseAsync(request, readBuffer, trackedExceptions).Result;
                        if (result.UploadSucceeded)
                        {
                            itemResult = result.ItemResponse;
                            item = result.ItemResponse;
                        }
                    }
                    if (itemResult == null)
                    {
                        UploadChunkResult result = null;
                        // Retry the upload ...
                        foreach (var request in chunkRequests)
                        {
                            // Send chunk request
                            result = provider.GetChunkRequestResponseAsync(request, readBuffer, trackedExceptions).Result;
                        }
                        item = result.ItemResponse;
                    }
                }
                item.Permissions = driveItem.Item.Permissions;
                GivePermission(item);

从Azure AD向客户端应用提供权限:

图形权限: Graph Permission

Sharepoint权限: Sharepoint Psermissions

即使具有所有这些权限,它也会给出以下错误消息:

  

“呼叫者无权执行该操作”。

需要哪些权限才能执行此操作?

其他驱动器的driveItem的上传成功执行。

1 个答案:

答案 0 :(得分:1)

现在其他驱动器的driveItem上传成功执行,您的代码应该可以了。

因此,解决此问题的关键在于用户的SharePoint权限。

请检查用户帐户是否可以将文件上传到SharePoint网站的目标文件夹中。

如果用户无权执行此操作,则需要使用管理员帐户向用户授予编辑权限。

详细步骤:

  1. 在文件夹名称旁边,单击省略号...
  2. 在文件弹出窗口中,单击共享
  3. 在“共享”对话框上,单击“ 共享对象”,然后单击“ 高级
  4. 点击停止继承权限
  5. 将用户添加到具有“编辑”或“贡献”的SharePoint组中 允许。 (如果您不想修改默认的SharePoint 组,只需创建一个新的组即可)

一种快速的方法:与用户共享此文件夹(具有编辑权限)。

在文件夹名称旁边,单击省略号... 。在文件弹出窗口中,单击共享。在“共享”对话框上,遵循屏幕截图。 enter image description here


更新:

请注意,我们无法将任何文档上载到“网站页面”文档库中。还不支持使用API​​。