【发布时间】:2020-11-20 21:54:59
【问题描述】:
我正在开发一个节点服务,它将文件在线推送到 SharePoint。 我们正在使用官方的 Graph SDK for JavaScript(..and Types)。
到目前为止 - 一切都很好,但如果文件夹包含长度为 0 的文件,我找不到将这些文件推送到驱动器的方法。
如果我尝试使用MicrosoftGraph.LargeFileUploadTask JavaScript 类或OneDriveLargeFileUploadTask,上传甚至不会开始,因为uploadSlice() 中“Content-Length”标头的格式设置失败。
我们可以跳过类的代码,自己上传一个空切片(所有代码只适用于空文件):
uploadedFile = await client
.api(uploadSession.url)
.headers({
"Content-Length": `0`,
"Content-Range": `bytes 0-0/0`,
})
.put(file); //file is an empty Buffer
结果:Error: The Content-Range header is missing or malformed
我尝试在不上传切片的情况下提交空文件:根据https://docs.microsoft.com/de-de/graph/api/driveitem-createuploadsession?view=graph-rest-1.0#completing-a-file(我已为上传会话明确设置deferCommit=true)
在文件的最终字节范围 PUT 到上传 URL 后,向上传 URL 发送最终的 POST 请求,内容长度为零(目前仅支持 OneDrive for Business 和 SharePoint)。
uploadedFile = await client.api(requestUrl)
.headers({
"Content-Length": `0`,
})
.post(null);
不走运,这是响应:SharePoint / Graph 预计缺少未知长度的字节,我认为:
{
"@odata.context":"...",
"expirationDateTime":"2020-11-10T16:04:31.594Z",
"nextExpectedRanges":["0-"],
"uploadUrl":"..."
}
文件不存在。
我找不到任何有关如何使用 Microsoft Graph 处理空文件的文档。我考虑过创建一个空文件,比如在线使用touch,而不是上传它,但我也找不到这样做的方法。
也许这是一个不受支持的场景?
【问题讨论】:
-
这里听起来像是一个不受支持的场景;即使我从 Sharepoint 在线尝试,情况也是如此 - 所以我不会在这里责怪 Microsoft Graph API。顺便说一句,为什么要在线将 0 字节推送到共享点?这背后有什么商业案例吗?
-
嗯。似乎是这样.. 我们需要单向同步包含 0 字节文件的文件夹作为一种标记(就像 .gitkeep 文件一样)有趣的想法:您可以通过 OneDrive Windows 客户端将 0 字节文件添加到 SharePoint Online图书馆没有问题。
-
有趣的问题。如果您仍然认为此功能增加了更多价值并由 Microsoft 实施,请考虑将其提交到 Microsoft uservoice (microsoftgraph.uservoice.com/forums/…) - 这样他们就可以考虑了。让我们知道进展如何。
标签: typescript microsoft-graph-api microsoft-graph-files