C# 上载后SharePoint文件大小与源文件不同
我们正在用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# 上载后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框架,但问题相同 我们正在使用以下方法复
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;
}
}