Sharepoint图像更改
本文关键字:图像 Sharepoint | 更新日期: 2023-09-27 18:29:25
我在C#中有一个小型客户端应用程序,它通过Web服务将图像发送到sharepoint站点。由于图像可能相当大,我需要检查文件是否已更改,这样我就不需要再次发送文件。
我通过计算从服务器请求文件的MD5哈希,并将其与客户端上的文件哈希进行比较,来检查文件是否发生了更改。
奇怪的是,这种方法可以处理我大约60%的图像,对于其余的图像,服务器会返回不同的哈希。如果我从sharepoint下载文件并替换本地文件,则哈希匹配。
我也尝试过CRC32,结果与相同
是否有人知道Sharepoint在图像文件发布到标准资源库时是否会将信息添加到图像文件中。
这是我用来计算MD5 的函数
protected string GetMD5HashFromFile(byte[] file)
{
MD5 md5 = new MD5CryptoServiceProvider();
byte[] retVal = md5.ComputeHash(file);
StringBuilder sb = new StringBuilder();
for (int i = 0; i < retVal.Length; i++)
{
sb.Append(retVal[i].ToString("x2"));
}
return sb.ToString();
}
编辑1
我已经将原始文件与sharepoint上发布的文件进行了比较,除了文件日期之外,其他文件都是相同的。
编辑2
澄清
在客户端上使用计算哈希
byte[] buff;
using (FileStream fs = System.IO.File.Open(filePath, FileMode.Open, FileAccess.Read))
{
buff = ConvertStreamToByteBuffer(fs);
}
public byte[] ConvertStreamToByteBuffer(System.IO.Stream theStream)
{
int b1;
System.IO.MemoryStream tempStream = new System.IO.MemoryStream();
while ((b1 = theStream.ReadByte()) != -1)
{
tempStream.WriteByte(((byte)b1));
}
return tempStream.ToArray();
}
然后
string md5Local = GetMD5HashFromFile(buff);
在服务器上,我只是用CAML查询获取一个列表项,然后计算
string Md5 = GetMD5HashFromFile(oSPListItemCollection[0].File.OpenBinary());
确认后,当您在SP 中注册图像属性时,Sharepoint会对其进行更改