azure - 图形 API:无法以编程方式上传具有特定属性的 OneDrive 项目(createdBy 和 lastModifiedDataTime 失败)
问题描述
我正在使用 Graph API 将项目上传到 OneDrive。成功上传后,我还在设置项目的属性。我可以设置“lastModifiedDateTime”,但无法设置“createdBy”和“createdDateTime”。
“createdBy”始终设置为我为 OAuth 创建的 Azure AD 应用程序,并且在 OneDrive UI 中它始终显示“修改者”“SharePoint 应用程序”。
并且“createdDataTime”始终是当前时间(上传时间)。有什么方法可以正确设置这些属性吗?
我用来修补项目属性的 json:
{"createdDateTime":"2020-12-28T12:25:39Z",
"lastModifiedDateTime":"2020-12-28T12:25:39Z",
"createdBy":
{
"user":{
"email":"AlexW@vx2.onmicrosoft.com"}
},
"lastModifiedBy":{
"user":{
"email":"AlexW@vx2.onmicrosoft.com"}
},
"fileSystemInfo":{
"lastModifiedDateTime":"2020-12-28T12:25:39Z",
"createdDateTime":"2020-12-28T12:25:39Z"},
"file":{"mimeType":"image/jpeg"}
}
请在上传和以上补丁请求之后找到属性(来自图形资源管理器的查询):
{
"createdDateTime": "2020-12-28T12:28:09Z",
"lastModifiedDateTime": "2020-12-28T12:25:39Z",
"createdBy":
{
"application": {
"displayName": "ConsoleApp"}
},
"fileSystemInfo": {
"createdDateTime": "2020-12-28T12:28:09Z",
"lastModifiedDateTime": "2020-12-28T12:25:39Z"
},
"file": {
"mimeType": "image/jpeg",
"hashes": {
"quickXorHash": "4EQEGnBnLd04VXEmYqGHHIeZ2po="
}
}
}
如您所见,用户名已替换为 Azure AD 应用程序名称,并且创建的时间是上传完成的时间,而不是补丁请求中指定的时间。
如果有人对此有任何想法,请告诉我。
解决方案
如果您参考以下文章:https ://docs.microsoft.com/en-us/graph/api/resources/driveitem?view=graph-rest-1.0在“属性”部分下。
这些是只读字段,这意味着您将无法手动配置相同的值。
解决方法:
话虽如此,这无法通过 Graph API 实现,但是您可以使用 Sharepoint API 来更新它。
为了修改创建者、最后修改者和最后修改者,示例正文如下:
{ formValues": [
{
"FieldName": "Editor",
"FieldValue": "[{'Key':'i:0#.w|AlexW@vx2.onmicrosoft.com'}]"
},
{
"FieldName": "Author",
"FieldValue": "[{'Key':'i:0#.w|AlexW@vx2.onmicrosoft.com'}]"
},
{
"FieldName": "Created",
"FieldValue": "02/18/2020 11:25 PM"
}
],
"bNewDocumentUpdate": true
}
请求网址:
https://SPOURL/_api/web/Lists/GetbyTitle('Library Name')/items(1)/ValidateUpdateListItem"
推荐阅读
- python - SVM 陷入优化
- nsurlsession - 使用 URLSession 和 URLRequest 为 uploadTask 添加内容配置参数
- qt - Qt EventFilter - 一旦事件被事件过滤器消耗,控制永远不会返回到 MouseArea
- python - Python - 无论发生什么异常,我如何让程序永远运行?
- javascript - 如何更改锚标签下载属性的下载路径
- reactjs - 如何使用文件对象设置状态
- r - 如何在 data.table 中返回行数和行数?
- javascript - HapiJs 基于角色路由访问
- c - 如何在微控制器硬件复位之前保存一些数据?
- java - 如何更改 hpi:run 的端口号