SitePages 列表驱动器中的 DrievItems 上传失败
Upload fail for DrievItems in Drive of SitePages List
与共享点站点中的 SitePage 列表关联的驱动器中的所有 DrivesItems 上传失败。
图表API请求:
UploadSession uploadSession = GraphCLient.Sites[{SiteId}].Drives[{DriveId of SitePages List }]. Items[{DriveFolderID}].ItemWithPath(driveItem.Item.Name).CreateUploadSession().Request().PostAsync().Result;
uploadSession 将成功创建,但 chunkuploadprovider 出错。
Error response: Code: accessDenied Message: The caller does not have
permission to perform the action. Inner error
代码片段:
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 向客户端应用提供权限:
图表权限:
共享点权限:
即使在所有这些权限之后,它也会给出此错误消息:
"The caller does not have permission to perform the action".
执行此操作需要哪些权限?
上传其他驱动器的 driveItems 执行成功。
现在其他驱动器的 driveItems 上传成功,你的代码应该没问题。
所以问题的关键在于用户的SharePoint权限。
请检查用户帐户是否可以将文件上传到您的 SharePoint 站点中的目标文件夹。
如果用户没有这样做的权限,您需要使用管理员帐户向用户授予编辑权限。
详细步骤:
- 在文件夹名称旁边,单击 省略号…
- 在文件弹出窗口 window 上,单击 共享。
- 在“共享”对话框中,单击共享给,然后单击
高级.
- 单击停止继承权限。
- 将用户添加到具有“编辑”或“参与”功能的 SharePoint 组
允许。 (如果您不想修改默认的 SharePoint
群,就新建一个)
快速方法:与用户共享此文件夹(具有编辑权限)。
在文件夹名称旁边,单击 省略号…。在文件弹出 window 上,单击 共享 。在“共享”对话框中,按照屏幕截图进行操作。
更新:
请注意,我们无法将任何文档上传到站点页面文档库中。也不支持使用 API。
与共享点站点中的 SitePage 列表关联的驱动器中的所有 DrivesItems 上传失败。
图表API请求:
UploadSession uploadSession = GraphCLient.Sites[{SiteId}].Drives[{DriveId of SitePages List }]. Items[{DriveFolderID}].ItemWithPath(driveItem.Item.Name).CreateUploadSession().Request().PostAsync().Result;
uploadSession 将成功创建,但 chunkuploadprovider 出错。
Error response: Code: accessDenied Message: The caller does not have permission to perform the action. Inner error
代码片段:
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 向客户端应用提供权限:
图表权限:
共享点权限:
即使在所有这些权限之后,它也会给出此错误消息:
"The caller does not have permission to perform the action".
执行此操作需要哪些权限?
上传其他驱动器的 driveItems 执行成功。
现在其他驱动器的 driveItems 上传成功,你的代码应该没问题。
所以问题的关键在于用户的SharePoint权限。
请检查用户帐户是否可以将文件上传到您的 SharePoint 站点中的目标文件夹。
如果用户没有这样做的权限,您需要使用管理员帐户向用户授予编辑权限。
详细步骤:
- 在文件夹名称旁边,单击 省略号…
- 在文件弹出窗口 window 上,单击 共享。
- 在“共享”对话框中,单击共享给,然后单击 高级.
- 单击停止继承权限。
- 将用户添加到具有“编辑”或“参与”功能的 SharePoint 组 允许。 (如果您不想修改默认的 SharePoint 群,就新建一个)
快速方法:与用户共享此文件夹(具有编辑权限)。
在文件夹名称旁边,单击 省略号…。在文件弹出 window 上,单击 共享 。在“共享”对话框中,按照屏幕截图进行操作。
更新:
请注意,我们无法将任何文档上传到站点页面文档库中。也不支持使用 API。