C# 上载后SharePoint文件大小与源文件不同

C# 上载后SharePoint文件大小与源文件不同,c#,.net,sharepoint,microsoft-graph-api,C#,.net,Sharepoint,Microsoft Graph Api,我们正在用C语言在.Net framework 4.5.2中开发一个WinForms(桌面)应用程序 使用Microsoft.Graph library 1.21.0和Micorosft.Graph.Core 1.19.0版本将文件从windows本地计算机复制到SharePoint/OneDrive云存储 我尝试使用Microsoft.Graph library 3.18.0和Micorosft.Graph.Core 1.22.0以及.Net 4.6.2框架,但问题相同 我们正在使用以下方法复

我们正在用C语言在.Net framework 4.5.2中开发一个WinForms(桌面)应用程序

使用Microsoft.Graph library 1.21.0和Micorosft.Graph.Core 1.19.0版本将文件从windows本地计算机复制到SharePoint/OneDrive云存储

我尝试使用Microsoft.Graph library 3.18.0和Micorosft.Graph.Core 1.22.0以及.Net 4.6.2框架,但问题相同

  • 我们正在使用以下方法复制小于4 MB的文件
  • uploadedItem=等待 MainDrive.Root.ItemWithPath(Uri.EscapeDataString(targetFilePath)).Content.Request().PutAsync(流, 取消令牌)

  • 正在使用ChunkUpload复制大于4 MB的文件
  • var session=wait MainDrive.Root.ItemWithPath(targetFilePath).CreateUploadSession().Request().PostAsync(cancellationToken);
    var provider=new ChunkedUploadProvider(会话、graphClient、流、OneDriveChunkSize);
    var chunkRequests=provider.GetUploadChunkRequests();
    var trackedExceptions=新列表();
    foreach(在chunkRequests中上载ChunkRequest请求)
    {
    等待带宽通知检查(fileInfo.Name、fp、cancellationToken);
    UploadChunkResult=Wait provider.GetChunkRequestResponseAsync(请求,trackedExceptions);
    if(result.uploadsuccessed)
    {
    uploadedItem=result.ItemResponse;
    }
    }
    
    问题:将文件复制到SharePoint后,我们得到的文件大小大于源文件大小。在OneDrive personal使用相同的api和方法的情况下,它运行良好。 我发现这是由于元数据被添加到文件中。我们没有在SharePoint上维护任何多版本的文件。 此问题主要涉及office文件(文档、xlsx和ppt),但不涉及任何大小的txt文件

    应用程序根据时间戳和文件大小区分源和目标上的文件不匹配。当文件在下一次运行中发现大小不同时,它会再次复制该文件

    同样的问题也有报道


    我正在寻找一种解决方法来比较源和目标之间的文件大小,以决定文件是否需要再次复制。

    github上也报告了同样的问题-那么您的问题是什么?我对这个API并不太熟悉,但有没有一种方法可以将您自己的元数据存储在文件之外(例如,在库列或其他元数据字段中)?如果是这样,您可以存储原始文件的哈希值,并使用该哈希值检查文件是否已更改。@JLRishe我也试图找到一种存储元数据的方法,但没有直接的方法。它还支持文件版本控制,因此元数据可能会因文件的每个版本而异。快速问题-在您的应用程序之外,您是否可以使用MS Grap重新解决此问题h Explorer还是POSTMAN?@Dev是的,您也可以通过在SharePoint portal中拖放文件来复制相同的内容。github上也报告了相同的问题-那么您的问题是什么?我对这个API不是很熟悉,但有没有办法将您自己的元数据存储在文件之外(例如,在库列或其他元数据字段中)?如果是这样,您可以存储原始文件的哈希值,并使用该哈希值检查文件是否已更改。@JLRishe我也试图找到一种存储元数据的方法,但没有直接的方法。它还支持文件版本控制,因此元数据可能会因文件的每个版本而异。快速问题-在您的应用程序之外,您是否可以使用MS Grap重新解决此问题h Explorer还是POSTMAN?@Dev是的,您也可以通过在SharePoint portal中拖放文件来复制相同的内容。
    var session = await MainDrive.Root.ItemWithPath(targetFilePath).CreateUploadSession().Request().PostAsync(cancellationToken);
    var provider = new ChunkedUploadProvider(session, graphClient, stream, OneDriveChunkSize);
    
    var chunkRequests = provider.GetUploadChunkRequests();  
    
    var trackedExceptions = new List<Exception>();
    
    foreach (UploadChunkRequest request in chunkRequests)
    {
       await CheckforBandwidthThrotelling(fileInfo.Name, fp, cancellationToken);
       UploadChunkResult result = await provider.GetChunkRequestResponseAsync(request, trackedExceptions);
       if (result.UploadSucceeded)
       {
        uploadedItem = result.ItemResponse;
       }
    }