是否可以获得 OneDrive 项目的完整路径?
Is it possible to get full path to a OneDrive item?
我在 C# 项目中使用 MS Graph SDK 在人们的 OneDrive 中搜索文件和文件夹中的特定术语。当我找到一个时,我没有找到一种方法来获取 DriveItem 的完整路径?
不是URL路径,而是拥有用户在本地存储文件的文件系统路径。
这可能吗?
当您请求驱动器项目的元数据时,例如:
{
"@microsoft.graph.downloadUrl": "https://m365x214355-my.sharepoint.com/personal/meganb_m365x214355_onmicrosoft_com/_layouts/15/download.aspx?UniqueId=c8b43b37-bc76-4352-af27-5a8e9f1bbfeb&Translate=false&tempauth=eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAvbTM2NXgyMTQzNTUtbXkuc2hhcmVwb2ludC5jb21AZGNkMjE5ZGQtYmM2OC00YjliLWJmMGItNGEzM2E3OTZiZTM1IiwiaXNzIjoiMDAwMDAwMDMtMDAwMC0wZmYxLWNlMDAtMDAwMDAwMDAwMDAwIiwibmJmIjoiMTUzMzg5NzE3MiIsImV4cCI6IjE1MzM5MDA3NzIiLCJlbmRwb2ludHVybCI6IitjMlZ4YU9UY2hCSEhmK3hyNlhrMExtd0pRMEhQR0hYMmlKaTBMRldhTHM9IiwiZW5kcG9pbnR1cmxMZW5ndGgiOiIxNjkiLCJpc2xvb3BiYWNrIjoiVHJ1ZSIsImNpZCI6Ik16VTVOVFkyWVRjdFlqazVOeTAwWlRsa0xUZ3hNV1V0TlRNMU5UZGhaRGc0WkdVeSIsInZlciI6Imhhc2hlZHByb29mdG9rZW4iLCJzaXRlaWQiOiJaRGd5TXpFeVpqa3RZakl6WWkwMFkySmpMVGsxWkRVdE0yVXdaRGswWlRZNFl6RmwiLCJhcHBfZGlzcGxheW5hbWUiOiJhcGlzYW5kYm94cHJveHkiLCJhcHBpZCI6IjAwOTFlNTllLTE3ZTgtNDdmMC1hNDUwLTQ0M2Q0ZGQzYTAwNiIsInRpZCI6ImRjZDIxOWRkLWJjNjgtNGI5Yi1iZjBiLTRhMzNhNzk2YmUzNSIsInVwbiI6Im1lZ2FuYkBtMzY1eDIxNDM1NS5vbm1pY3Jvc29mdC5jb20iLCJwdWlkIjoiMTAwM0JGRkRBMzgxMzFBRiIsInNjcCI6ImFsbHNpdGVzLnJlYWQgbXlmaWxlcy5yZWFkIGdyb3VwLnJlYWQgbXlmaWxlcy5yZWFkIGFsbHNpdGVzLnJlYWQgYWxsc2l0ZXMucmVhZCBteWZpbGVzLnJlYWQgYWxscHJvZmlsZXMucmVhZCBhbGxwcm9maWxlcy5yZWFkIiwidHQiOiIyIiwidXNlUGVyc2lzdGVudENvb2tpZSI6bnVsbH0.eWQzcTFxNmhBb0txNFNnZzQyNlIyU2gzaUQwSGJxbC9abWRlVVZ3OGUwMD0&ApiVersion=2.0",
"createdDateTime": "2017-08-07T16:17:44Z",
"eTag": "\"{C8B43B37-BC76-4352-AF27-5A8E9F1BBFEB},2\"",
"id": "01BYE5RZZXHO2MQ5V4KJB26J22R2PRXP7L",
"lastModifiedDateTime": "2017-08-07T16:17:44Z",
"name": "Camera Customer Analysis.xlsx",
"webUrl": "https://m365x214355-my.sharepoint.com/personal/meganb_m365x214355_onmicrosoft_com/_layouts/15/Doc.aspx?sourcedoc=%7BC8B43B37-BC76-4352-AF27-5A8E9F1BBFEB%7D&file=Camera%20Customer%20Analysis.xlsx&action=default&mobileredirect=true",
"cTag": "\"c:{C8B43B37-BC76-4352-AF27-5A8E9F1BBFEB},1\"",
"size": 2675045,
"createdBy": {
"user": {
"email": "MeganB@M365x214355.onmicrosoft.com",
"id": "48d31887-5fad-4d73-a9f5-3c356e68a038",
"displayName": "Megan Bowen"
}
},
"lastModifiedBy": {
"user": {
"email": "MeganB@M365x214355.onmicrosoft.com",
"id": "48d31887-5fad-4d73-a9f5-3c356e68a038",
"displayName": "Megan Bowen"
}
},
"parentReference": {
"driveId": "b!-RIj2DuyvEyV1T4NlOaMHk8XkS_I8MdFlUCq1BlcjgmhRfAj3-Z8RY2VpuvV_tpd",
"driveType": "business",
"id": "01BYE5RZ6TAJHXA5GMWZB2HDLD7SNEXFFU",
"path": "/drive/root:/CR-227 Project"
},
"file": {
"mimeType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"hashes": {
"quickXorHash": "qz9+NLaGwZCFBcd9gH+HCNUVcn8="
}
},
"fileSystemInfo": {
"createdDateTime": "2017-08-07T16:17:44Z",
"lastModifiedDateTime": "2017-08-07T16:17:44Z"
}
}
如您所见,它包含一个 parentReference
,其中包含 path
要获得完整路径,请从第一个 :
开始对 path
进行子字符串化,然后附加 name
。
在上面的示例中,它将给出:/CR-227 Project/Camera Customer Analysis.xlsx
但是,获取用户在本地存储文件的本地路径并不是微软存储的。但是你可以复制它,因为OneDrive文件结构将与本地文件结构相同。
根据我的测试,我们无法使用GraphAPI获取OneDrive本地文件系统的根目录。我们只能得到OneDrive项的相对路径。
我的测试配置:本地存储目录:C:/onedrive。该文件存储在“C:/onedrive/Test Floder/”中。我们只能得到“path /drive/root:Test”。
enter image description here
重现步骤:
我们可以先尝试下面的API获取用户OneDrive设置的相对路径:
https://graph.microsoft.com/v1.0/me/drive/items/{item-id}/children .
然后,可以将用户设置的文件系统路径与从API.
获取的相对路径拼接起来
我们可以为OneDrive在本地系统设置不同的文件系统路径。可以参考本文设置OneDrive的本地存储位置。
我在 C# 项目中使用 MS Graph SDK 在人们的 OneDrive 中搜索文件和文件夹中的特定术语。当我找到一个时,我没有找到一种方法来获取 DriveItem 的完整路径?
不是URL路径,而是拥有用户在本地存储文件的文件系统路径。
这可能吗?
当您请求驱动器项目的元数据时,例如:
{
"@microsoft.graph.downloadUrl": "https://m365x214355-my.sharepoint.com/personal/meganb_m365x214355_onmicrosoft_com/_layouts/15/download.aspx?UniqueId=c8b43b37-bc76-4352-af27-5a8e9f1bbfeb&Translate=false&tempauth=eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIwMDAwMDAwMy0wMDAwLTBmZjEtY2UwMC0wMDAwMDAwMDAwMDAvbTM2NXgyMTQzNTUtbXkuc2hhcmVwb2ludC5jb21AZGNkMjE5ZGQtYmM2OC00YjliLWJmMGItNGEzM2E3OTZiZTM1IiwiaXNzIjoiMDAwMDAwMDMtMDAwMC0wZmYxLWNlMDAtMDAwMDAwMDAwMDAwIiwibmJmIjoiMTUzMzg5NzE3MiIsImV4cCI6IjE1MzM5MDA3NzIiLCJlbmRwb2ludHVybCI6IitjMlZ4YU9UY2hCSEhmK3hyNlhrMExtd0pRMEhQR0hYMmlKaTBMRldhTHM9IiwiZW5kcG9pbnR1cmxMZW5ndGgiOiIxNjkiLCJpc2xvb3BiYWNrIjoiVHJ1ZSIsImNpZCI6Ik16VTVOVFkyWVRjdFlqazVOeTAwWlRsa0xUZ3hNV1V0TlRNMU5UZGhaRGc0WkdVeSIsInZlciI6Imhhc2hlZHByb29mdG9rZW4iLCJzaXRlaWQiOiJaRGd5TXpFeVpqa3RZakl6WWkwMFkySmpMVGsxWkRVdE0yVXdaRGswWlRZNFl6RmwiLCJhcHBfZGlzcGxheW5hbWUiOiJhcGlzYW5kYm94cHJveHkiLCJhcHBpZCI6IjAwOTFlNTllLTE3ZTgtNDdmMC1hNDUwLTQ0M2Q0ZGQzYTAwNiIsInRpZCI6ImRjZDIxOWRkLWJjNjgtNGI5Yi1iZjBiLTRhMzNhNzk2YmUzNSIsInVwbiI6Im1lZ2FuYkBtMzY1eDIxNDM1NS5vbm1pY3Jvc29mdC5jb20iLCJwdWlkIjoiMTAwM0JGRkRBMzgxMzFBRiIsInNjcCI6ImFsbHNpdGVzLnJlYWQgbXlmaWxlcy5yZWFkIGdyb3VwLnJlYWQgbXlmaWxlcy5yZWFkIGFsbHNpdGVzLnJlYWQgYWxsc2l0ZXMucmVhZCBteWZpbGVzLnJlYWQgYWxscHJvZmlsZXMucmVhZCBhbGxwcm9maWxlcy5yZWFkIiwidHQiOiIyIiwidXNlUGVyc2lzdGVudENvb2tpZSI6bnVsbH0.eWQzcTFxNmhBb0txNFNnZzQyNlIyU2gzaUQwSGJxbC9abWRlVVZ3OGUwMD0&ApiVersion=2.0",
"createdDateTime": "2017-08-07T16:17:44Z",
"eTag": "\"{C8B43B37-BC76-4352-AF27-5A8E9F1BBFEB},2\"",
"id": "01BYE5RZZXHO2MQ5V4KJB26J22R2PRXP7L",
"lastModifiedDateTime": "2017-08-07T16:17:44Z",
"name": "Camera Customer Analysis.xlsx",
"webUrl": "https://m365x214355-my.sharepoint.com/personal/meganb_m365x214355_onmicrosoft_com/_layouts/15/Doc.aspx?sourcedoc=%7BC8B43B37-BC76-4352-AF27-5A8E9F1BBFEB%7D&file=Camera%20Customer%20Analysis.xlsx&action=default&mobileredirect=true",
"cTag": "\"c:{C8B43B37-BC76-4352-AF27-5A8E9F1BBFEB},1\"",
"size": 2675045,
"createdBy": {
"user": {
"email": "MeganB@M365x214355.onmicrosoft.com",
"id": "48d31887-5fad-4d73-a9f5-3c356e68a038",
"displayName": "Megan Bowen"
}
},
"lastModifiedBy": {
"user": {
"email": "MeganB@M365x214355.onmicrosoft.com",
"id": "48d31887-5fad-4d73-a9f5-3c356e68a038",
"displayName": "Megan Bowen"
}
},
"parentReference": {
"driveId": "b!-RIj2DuyvEyV1T4NlOaMHk8XkS_I8MdFlUCq1BlcjgmhRfAj3-Z8RY2VpuvV_tpd",
"driveType": "business",
"id": "01BYE5RZ6TAJHXA5GMWZB2HDLD7SNEXFFU",
"path": "/drive/root:/CR-227 Project"
},
"file": {
"mimeType": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
"hashes": {
"quickXorHash": "qz9+NLaGwZCFBcd9gH+HCNUVcn8="
}
},
"fileSystemInfo": {
"createdDateTime": "2017-08-07T16:17:44Z",
"lastModifiedDateTime": "2017-08-07T16:17:44Z"
}
}
如您所见,它包含一个 parentReference
,其中包含 path
要获得完整路径,请从第一个 :
开始对 path
进行子字符串化,然后附加 name
。
在上面的示例中,它将给出:/CR-227 Project/Camera Customer Analysis.xlsx
但是,获取用户在本地存储文件的本地路径并不是微软存储的。但是你可以复制它,因为OneDrive文件结构将与本地文件结构相同。
根据我的测试,我们无法使用GraphAPI获取OneDrive本地文件系统的根目录。我们只能得到OneDrive项的相对路径。
我的测试配置:本地存储目录:C:/onedrive。该文件存储在“C:/onedrive/Test Floder/”中。我们只能得到“path /drive/root:Test”。 enter image description here
重现步骤: 我们可以先尝试下面的API获取用户OneDrive设置的相对路径: https://graph.microsoft.com/v1.0/me/drive/items/{item-id}/children . 然后,可以将用户设置的文件系统路径与从API.
获取的相对路径拼接起来我们可以为OneDrive在本地系统设置不同的文件系统路径。可以参考本文设置OneDrive的本地存储位置。