我目前正在使用一种 Windows 服务,该服务可以从特定位置移动文件,并使它们与 SharePoint 文档库保持同步。
上传/同步/等功能运行良好,但我遇到了文件属性问题。上传时(下面的代码示例)文件 LastModified 属性设置为文件上传的时间。如果我直接将文件复制/粘贴到目录中,情况并非如此。
我已经研究过在上传后只更改属性的可能性,但这并不理想。从测试来看,这似乎是由于流被“构建”为另一端的新文件造成的?有没有办法用文件发送文件属性?
public static string UploadFile(string destUrl, string sourcePath, CredentialCache cc)
{
try
{
Uri destUri = new Uri(destUrl);
FileStream inStream = File.OpenRead(sourcePath);
WebRequest req = WebRequest.Create(destUri);
req.Method = "PUT";
req.Headers.Add("Overwrite", "F");
req.Timeout = System.Threading.Timeout.Infinite;
req.Credentials = cc;
Stream outStream = req.GetRequestStream();
byte[] buffer = new byte[32768];
int read;
while ((read = inStream.Read(buffer, 0, buffer.Length)) > 0)
{
outStream.Write(buffer, 0, read);
}
outStream.Flush();
outStream.Close();
inStream.Flush();
inStream.Close();
WebResponse ores = req.GetResponse();
ores.Close();
return "success";
} //End Try for Try/Catch of UploadFile()
catch (Exception ex)
{
return ex.Message;
} //End Try/Catch for UploadFile()
} //End UploadFile()
编辑 - 附加信息
总结一下我在下面的答案中留下的评论:
我也注意到,因为我发布了 Sharepoint 将信息列为新信息的问题,即使您直接复制它,因为它基于数据库信息(我相信?)。我已经调查过了File.SetLastWriteTime
,但似乎 SharePoint 不喜欢我触摸东西。
我也尝试使用 SharePoint 调用设置特征和上传文件,但由于我发布到外部 SharePoint 实例,除非我走这WebRequest
条路线,否则我无法进行身份验证。