c# base64及MD5工具类
using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; namespace TJCFinanceWriteOff.BizLogic.Common { public class FileUtil { /// <summary> /// 将文件转换为base64String /// </summary> /// <param name="filePath">文件路径</param> /// <returns></returns> public static string GetFileBase64(string filePath) { filePath = filePath ?? throw new ArgumentException("文件路径错误"); try { using(FileStream fs = File.OpenRead(filePath)) { return GetFileBase64(fs); } } catch (Exception ex) { throw; } } /// <summary> /// 将文件转换为base64String /// </summary> /// <param name="stream"></param> /// <returns></returns> public static string GetFileBase64(Stream stream) { stream = stream ?? throw new ArgumentException("参数不能为空"); try { byte[] bytes = new byte[stream.Length]; stream.Read(bytes, 0, bytes.Length); // 设置当前流的位置为流的开始 stream.Seek(0, SeekOrigin.Begin); return Convert.ToBase64String(bytes,0, bytes.Length); } catch (Exception ex) { throw; } } /// <summary> /// 计算文件的MD5值 /// 用做于缓存Key /// </summary> /// <param name="arg">类型只能为string or stream,否则将会抛出错误</param> /// <returns>文件的MD5值</returns> public static string GetFileMd5(object arg) { MD5 md5Hash = MD5.Create(); byte[] data = null; switch (arg) { case string str: data = md5Hash.ComputeHash(Encoding.UTF8.GetBytes(str)); break; case Stream stream: data = md5Hash.ComputeHash(stream); break; case null: throw new ArgumentException("参数不能为空"); default: throw new ArgumentException("参数类型错误"); } StringBuilder sBuilder = new StringBuilder(); for (int i = 0; i < data.Length; i++) { sBuilder.Append(data[i].ToString("x2")); } md5Hash.Dispose(); return sBuilder.ToString(); } /// <summary> /// 遍历文件夹获取文件路径 /// </summary> /// <param name="direPath"></param> /// <returns></returns> public static DataTable GetFilesByDirePath(string direPath) { DirectoryInfo folder = new DirectoryInfo(direPath); if (!folder.Exists) { throw new DirectoryNotFoundException("文件夹不存在!"); } var datas = (from x in folder.GetFiles() where x.Extension == ".jpg" || x.Extension == ".jpeg" orderby int.Parse(x.Name.Split('.')[0]) select x.FullName).ToArray(); var dt = new DataTable(); dt.Columns.Add("序号", typeof(int)); dt.Columns.Add("扫描图片", typeof(string)); dt.Columns.Add("识别结果", typeof(string)); DataRow dr = null; for (int i = 0; i < datas.Length; i++) { dr = dt.NewRow(); dr[0] = i + 1; dr[1] = datas[i]; dr[2] = "未扫描"; dt.Rows.Add(dr); } return dt; } /// <summary> /// 将DataTable中的数据转换为base64集合 /// </summary> /// <param name="dt"></param> /// <returns></returns> public static string[] GetFilesBase64(DataTable dt) { List<string> filesBase64Array = new List<string>(); foreach (DataRow item in dt.Rows) { filesBase64Array.Add(GetFileBase64(item["扫描图片"].ToString())); } return filesBase64Array.ToArray(); } /// <summary> /// 将图片List以正面 反面 分割 /// </summary> /// <param name="source">源数据List</param> /// <param name="obverse">正面图片集合</param> /// <param name="reverse">反面图片集合</param> public static void SplitList(List<string> source, out List<string> obverse, out List<String> reverse) { //1.将List一分为二 obverse = source.Take(source.Count / 2).ToList(); reverse = source.Skip(source.Count / 2).ToList(); reverse.Reverse(); } /// <summary> /// 将图片List以正面 反面 分割 (备用) /// </summary> /// <param name="source">源数据List</param> /// <param name="obverse">正面图片集合</param> /// <param name="reverse">反面图片集合</param> public static void SplitListBackup(List<string> source, out List<string> obverse, out List<String> reverse) { //1.将List一分为二并翻转 obverse = new Queue<string>(source.Take(source.Count / 2)).ToList(); reverse = new Stack<string>(source.Skip(source.Count / 2)).ToList(); } } }