Microsoft Graph Files API真的允许在上传失败后修复文件名吗



Microsoft API文档指出,如果文件名已经存在,则在文件上载结束时可能会出现错误,并提供了一种方法来解决问题,即在向类似于创建上载会话的URL发出PUT请求时提供新名称。

我无法使用这种方法进行恢复,因为一旦我得到错误,会话似乎不再有效。它既适用于个人帐户,也适用于企业帐户,但错误消息和行为略有不同。

创建会话

POST drives/{driveId}/items/{folderId}:/filename.txt:/createUploadSession
{
"item": {
"@microsoft.graph.conflictBehavior" : "fail",
"name" : "filename.txt"
}
}

响应

{
"expirationDateTime": "2022-10-15T11:03:51.568Z",
"nextExpectedRanges": ["0-"],
"uploadUrl": "{uploadUrl}"
}

上传字节

PUT {uploadUrl}

响应

Status 409
{
"error": {
"code": "nameAlreadyExists",
"message": "An item with the same name already exists under the parent"
}
}

修复文件名

PUT drives/{driveId}/items/{folderId}:/filename~01.txt
{
"@microsoft.graph.sourceUrl": "{uploadUrl}",
"@microsoft.graph.conflictBehavior" : "fail",
"name" : "filename~01.txt"
}

针对个人
的响应

{
"error": {
"code": "itemNotFound",
"message": "Upload session not found",
"innerError": {
"code": "uploadSessionNotFound"
}
}
}

业务响应:

Status 400
{
"error": {
"code": "invalidRequest",
"message": "@content.sourceUrl can only contain a data uri."
}
}

访问上传会话

GET {uploadUrl}

响应(针对个人(

{
"expirationDateTime": "2022-10-15T11:03:51.568Z",
"nextExpectedRanges": []
}

响应(针对业务(

Status 404
{
"error": {
"code": "itemNotFound",
"message": "The upload session was not found"
}
}

如何适当地解决此问题?

当提交因名称冲突而失败时,上传会话似乎会终止。这意味着您将无法使用新名称重试提交。

您可以做的一件事是使用rename冲突行为,完成后,如果名称不是您期望的名称,您可以假设发生冲突,并向备份名称发送重命名请求。也可能是服务选择的名称足够了(基本上只是在扩展名之前加一个数字(,在这种情况下,您不需要做任何其他事情。

最新更新