远程升级需要文件的长度和MD5.
选择文件后可直接计算出文件的长度和MD5.
using System.IO;
FileStream _fileStream;
string _filepath;
string _filename;
long _filelength;
private void button4_Click(object sender, EventArgs e)
{
using(OpenFileDialog ofd = new OpenFileDialog())
{
ofd.Multiselect = false;//是否选取多个文件
ofd.CheckFileExists = true;//提示文件不存在
if(ofd.ShowDialog() == DialogResult.OK)//显示选取文件框
{
_filepath=ofd.FileName;
_filename = ofd.SafeFileName;
using (_fileStream = new FileStream(_filepath, FileMode.Open))
{
_filelength = _fileStream.Length;//计算文件长度,这里需要文件的路径
}
}
}
string md5buf = GetMD5HashFromFile(_filepath);
if (String.IsNullOrEmpty(comboBox1.Text))
{
MessageBox.Show("请选择edgeid");
}
else
{
SoftwareUpgrading softwareUpgrading = new SoftwareUpgrading()
{
edgeid = comboBox1.Text,
cmd = "upgrade",
param = new URL() { packageLen = _filelength, packageMd5 = md5buf, packageVer = "", url = "" + _filename }
};
string softwareupjson = JsonConvert.SerializeObject(softwareUpgrading);
sendMsg(softwareupjson);
}
}
/// <summary>
/// MD5的计算
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
/// <exception cref="System.Exception"></exception>
public static string GetMD5HashFromFile(string fileName)
{
try
{
FileStream file = new FileStream(fileName, FileMode.Open);
System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] retVal = md5.ComputeHash(file);
file.Close();
StringBuilder sb = new StringBuilder();
for(int i = 0; i < retVal.Length; i++)
{
sb.Append(retVal[i].ToString("x2"));
}
return sb.ToString();
}catch (System.Exception ex)
{
throw new System.Exception("GetMD5HashFromFile() fail,error:" + ex.Message);
}
}