文件上传与MD5文件加密代码保存

       前端: <input id="UpLoad" type="file" runat="server" /> 
       //取出所选文件的本地路径
        string fullFileName = this.UpLoad.PostedFile.FileName;
        //从路径中截取出文件名
        string fileName = fullFileName.Substring(fullFileName.LastIndexOf("\\") + 1);
        string pathName1 = Path.GetFileNameWithoutExtension(fullFileName);    //获取文件名 text
        //获取文件大小
        string fileSize = Convert.ToString(this.UpLoad.PostedFile.ContentLength);
        Stream afile = UpLoad.PostedFile.InputStream;
        string md = GetMD5Hash(afile); //md5
        string currPath = @"D:\QLSSFILES\";             
        string subPath = currPath + dic + "\\" + pathName1 + dd + version.ToString()+ "\\"; 
        //检查是否存在文件夹
            if (false == System.IO.Directory.Exists(subPath))
            {
                //创建pic文件夹
                System.IO.Directory.CreateDirectory(subPath);
            }
             string saveFileName = subPath + fileName;
             UpLoad.PostedFile.SaveAs(saveFileName);

public static string GetMD5Hash(string str)
{
//就是比string往后一直加要好的优化容器
StringBuilder sb = new StringBuilder();
using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider())
{
//将输入字符串转换为字节数组并计算哈希。
byte[] data = md5.ComputeHash(Encoding.UTF8.GetBytes(str));

            //X为     十六进制 X都是大写 x都为小写
            //2为 每次都是两位数
            //假设有两个数10和26,正常情况十六进制显示0xA、0x1A,这样看起来不整齐,为了好看,可以指定"X2",这样显示出来就是:0x0A、0x1A。 
            //遍历哈希数据的每个字节
            //并将每个字符串格式化为十六进制字符串。
            int length = data.Length;
            for (int i = 0; i < length; i++)
                sb.Append(data[i].ToString("X2"));

        }
        return sb.ToString();
    }

    public static string GetMD5Hash(Stream str)
    {
        //就是比string往后一直加要好的优化容器
        StringBuilder sb = new StringBuilder();
        using (MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider())
        {
            //将输入字符串转换为字节数组并计算哈希。
            byte[] data = md5.ComputeHash(str);

            //X为     十六进制 X都是大写 x都为小写
            //2为 每次都是两位数
            //假设有两个数10和26,正常情况十六进制显示0xA、0x1A,这样看起来不整齐,为了好看,可以指定"X2",这样显示出来就是:0x0A、0x1A。 
            //遍历哈希数据的每个字节
            //并将每个字符串格式化为十六进制字符串。
            int length = data.Length;
            for (int i = 0; i < length; i++)
                sb.Append(data[i].ToString("X2"));

        }
        return sb.ToString();
    }
posted @ 2021-06-30 14:59  MeiHe  阅读(334)  评论(0)    收藏  举报