【问题标题】:Upload fail for DrievItems in Drive of SitePages List上传网站页面列表驱动器中驱动器项目的文件
【发布时间】:2019-12-11 15:02:07
【问题描述】:

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

图形 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 向客户端应用程序提供权限:

图表权限:

共享点权限:

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

“调用者无权执行该操作”。

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

其他驱动的driveItems上传成功。

【问题讨论】:

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


    【解决方案1】:

    现在其他驱动的driveItems上传成功执行,你的代码应该没问题。

    所以问题的关键在于用户的 SharePoint 权限。

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

    如果用户没有权限这样做,您需要使用管理员帐户授予用户编辑权限。

    详细步骤:

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

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

    点击文件夹名称旁边的省略号…。在文件弹出窗口中,单击分享。在“共享”对话框中,按照屏幕截图进行操作。


    更新:

    请注意,我们无法将任何文档上传到站点页面文档库。也不支持使用 API。

    【讨论】:

    • 我尝试了您的步骤,但对我不起作用。仍然得到同样的错误。另外,我正在使用 App only authentication 来验证我的 graphclient 。因此,我认为用户权限不会产生任何影响。
    • 用户账号可以在SharePoint网站上传文件吗?转到 yourdomain.sharepoint.com 导航到目标文件夹/驱动器进行测试。
    • 用户账号可以在sharepoint站点的其他文档库上上传文件,但不能在SitePages文档库(是系统生成的文档库类型List)上上传。
    • @SubhanuSharma 我想我知道原因。对于普通的文档库,您可以使用我上面提到的方法授予上传权限。但是您不能将任何文档上传到 SitePages 文档库。当然你也不能用API来实现。
    • 是的,它是一个管理员帐户。文档库名称为 Site Pages。它是一个站点页面库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 2011-10-24
    • 2012-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多