0

我正在开发一个节点服务,它将文件在线推送到 SharePoint。我们正在使用官方的 Graph SDK for JavaScript (..and Types)。

到目前为止 - 一切都很好,但如果文件夹包含一个长度为 0 的文件,我找不到将这些文件推送到驱动器的方法。

如果我尝试使用MicrosoftGraph.LargeFileUploadTaskJavaScript 类或者OneDriveLargeFileUploadTask上传甚至没有开始,因为“Content-Length”标头的格式设置uploadSlice()失败。

我们可以跳过类的代码,自己上传一个空切片(所有代码只适用于空文件):

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-文件(我已明确设置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在线使用,而不是上传它,但我也找不到这样做的方法。

也许这是一个不受支持的场景?

4

1 回答 1

0
于 2020-11-20T13:54:59.283 回答