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());

Sharepoint图像更改

确认后,当您在SP 中注册图像属性时,Sharepoint会对其进行更改