From 6efd8e81834e94885a18855fd32bb98e008a6fa0 Mon Sep 17 00:00:00 2001 From: HFO4 <912394456@qq.com> Date: Sun, 21 Mar 2021 21:02:31 +0800 Subject: [PATCH] Fix: file size not match while uploading office docs to SharePoint sites --- service/callback/upload.go | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/service/callback/upload.go b/service/callback/upload.go index 5ccf79a..5a74ba3 100644 --- a/service/callback/upload.go +++ b/service/callback/upload.go @@ -207,7 +207,15 @@ func (service *OneDriveCallback) PreProcess(c *gin.Context) serializer.Response // 验证与回调会话中是否一致 actualPath := strings.TrimPrefix(callbackSession.SavePath, "/") - if callbackSession.Size != info.Size || info.GetSourcePath() != actualPath { + isSizeCheckFailed := callbackSession.Size != info.Size + + // SharePoint 会对 Office 文档增加 meta data 导致文件大小不一致,这里增加 10 KB 宽容 + // See: https://github.com/OneDrive/onedrive-api-docs/issues/935 + if strings.Contains(fs.Policy.OptionsSerialized.OdDriver, "sharepoint.com") && isSizeCheckFailed && (info.Size > callbackSession.Size) && (info.Size-callbackSession.Size <= 10240) { + isSizeCheckFailed = false + } + + if isSizeCheckFailed || info.GetSourcePath() != actualPath { fs.Handler.(onedrive.Driver).Client.Delete(context.Background(), []string{info.GetSourcePath()}) return serializer.Err(serializer.CodeUploadFailed, "文件信息不一致", err) }