MS Graph API 将共享文件夹的文件夹复制到同一父文件夹中不会复制子文件夹和文件

MS Graph API copy folder of shared folder into the same parent won't copy subfolders and files

上个月,我在我的 angular 网络应用程序中设置了 Microsoft 服务集成,以访问公司的 个人帐户 onedrive。因此,我们使用 MSAL 作为身份验证服务,并使用 msal-angular 中的 MSAL_INTERCEPTOR 来验证我们的请求。所有员工都将公司的 onedrive 作为共享驱动器。一切正常,但本周我收到反馈,应该用新名称复制的模型文件夹没有创建子文件夹和文件。

让我展示一下我的工作流程,以使用另一个名称将模型文件夹复制到同一父文件夹中:

  1. 获取模型文件夹的元数据并保存父信息:
GET https://graph.microsoft.com/v1.0/drives/SHARED_DRIVE_ID/items/SHARED_DRIVE_ID!52853:/05-DRM/01-Em%20Andamento/ORC-000_ANO-NOME%20DO%20CONTRATO-GESTOR

response:
{
  ...
  "id": "SHARED_DRIVE_ID!110649",
  "lastModifiedDateTime": "2021-05-21T15:28:55.567Z",
  "name": "ORC-000_ANO-NOME DO CONTRATO-GESTOR",
  "size": 0,
  "webUrl": "https://1drv.ms/f/s!ABM9Mjoi6dy8huA5",
  ...
  "parentReference": {
    "driveId": "SHARED_DRIVE_ID",
    "driveType": "personal",
    "id": "SHARED_DRIVE_ID!95075",
    "name": "01-Em Andamento",
    "path": "/drives/SHARED_DRIVE_ID/items/SHARED_DRIVE_ID!52853:/05-DRM/01-Em%20Andamento"
  },
  "fileSystemInfo": { "createdDateTime": "2021-02-11T13:47:04Z", "lastModifiedDateTime": "2021-03-29T13:50:23.99Z" },
  "folder": {
    "childCount": 8,
    "view": { "viewType": "thumbnails", "sortBy": "takenOrCreatedDateTime", "sortOrder": "ascending" }
  },
  "shared": { "scope": "users", "owner": { "user": { "displayName": "Nortan Diretores", "id": "SHARED_DRIVE_ID" } } }
}

  1. 使用“parentReference”发出复制请求
POST https://graph.microsoft.com/v1.0/drives/SHARED_DRIVE_ID/items/SHARED_DRIVE_ID!52853:/05-DRM/01-Em%20Andamento/ORC-000_ANO-NOME%20DO%20CONTRATO-GESTOR:/copy

payload:
{
  "parentReference": { "driveId": "SHARED_DRIVE_ID", "id": "SHARED_DRIVE_ID!95075" },
  "name": "ORC-189_2021-Posto de Combustível 3M-Nichollas Gomes"
}

response:
Status Code: 202 Accepted
  1. 新复制的文件夹包含模型文件夹的所有子文件夹和文件。

  2. 接受复制请求四秒后(因为没有办法通知复制过程),我获取新文件夹的信息以获取网络URL.

此工作流程在我对员工个人 onedrive 文件夹的测试中有效,它也适用于我们的共享文件夹。但是现在,在共享文件夹中,当我们到达工作流程的第 4 步时,只会创建一个空的新文件夹。

试图了解发生了什么,我还注意到,当它在 onedrive 网站上发出复制请求时,显示复制操作在稍后失败并出现以下错误:Error: Try again or refresh page,但我不能'不要调试这个错误。有办法调试这个错误吗?

编辑 1: 我使用 Postman 在我的网络应用程序外尝试了第 2 步,但同样的问题发生了。

编辑 2: 邮递员请求回复:

Staus: 202Accepted    Time: 1596 ms    Size: 719 B

{
  "Date": "Sat, 22 May 2021 16:46:16 GMT",
  "Cache-Control": "no-store",
  "Transfer-Encoding": "chunked",
  "Location": "https://df.api.onedrive.com/v1.0/monitor/4s7kSj8n8-eF7gyNg40BOOKlQvmxjiQ9Yvana5Jl1l87mCOs4AGis4lO95DtmZaccjg-teKUNaY5EQtMya2RnjHfVY7DDbNXgCMYrQju89nzRdbwORmMhSxoy6mds4QfFOmAF92vSB7JL3J2456uxirjwjE3KCkN3KC9TfrJcxvGtFQU1VT7Euk6WMpoq3HeRcOwCtEP1GWuegI3qo1jFSj8PKoyIvTMrZ43snVoiBmjupBHiDlnTUsLkWzqUZ5v1X",
  "Strict-Transport-Security": "max-age=31536000",
  "request-id": "3a02e7bd-dbac-48e6-9a62-939ce0f2e3e0",
  "client-request-id": "3a02e7bd-dbac-48e6-9a62-939ce0f2e3e0",
  "x-ms-ags-diagnostic": {
    "ServerInfo": {
      "DataCenter": "Brazil South",
      "Slice": "E",
      "Ring": "3",
      "ScaleUnit": "000",
      "RoleInstance": "CP1PEPF00001A64"
    }
  }
}

终于知道问题出在哪里了。复制端点不处理使用项目作为基本路径的相对路径,例如:

POST https://graph.microsoft.com/v1.0/drives/SHARED_DRIVE_ID/items/SHARED_DRIVE_ID!52853:/05-DRM/01-Em%20Andamento/ORC-000_ANO-NOME%20DO%20CONTRATO-GESTOR:/copy

所以,我刚刚在我的工作流中更改了复制端点,使用我在获取文件夹元数据时获得的项目 ID 来获取父信息。现在我的复制请求是:

POST https://graph.microsoft.com/v1.0/drives/SHARED_DRIVE_ID/items/SHARED_DRIVE_ID!110649/copy

此更改后我的复制操作监视器结果为:

{
    "errorCode": "",
    "operation": "itemCopy",
    "percentageComplete": 100.0,
    "resourceId": "SHARED_DRIVE_ID!290908",
    "status": "completed",
    "statusDescription": "Completed 10/10 files; 15906/15906 bytes"
}

相反,

{
    "errorCode": "",
    "operation": "itemCopy",
    "percentageComplete": 0.0,
    "status": "notStarted",
    "statusDescription": "Completed 0/0 files; 0/0 bytes"
}

感谢@Dev 的支持。