using DownKyi.Core.Logging; using DownKyi.Core.Storage.Database; using DownKyi.Core.Utils.Encryptor; using System; using System.Drawing; using System.IO; using System.Windows.Media.Imaging; namespace DownKyi.Core.Storage { public class StorageHeader { // 先判断本地有没有 // 如果有 // 则返回本地的图片路径 // 如果没有 // 则下载图片并返回本地的图片路径 /// /// 获取用户头像缩略图 /// /// /// /// /// /// /// public BitmapImage GetHeaderThumbnail(long mid, string name, string url, int width, int height) { string header = GetHeader(mid, name, url); return GetHeaderThumbnail(header, width, height); } /// /// 获取用户头像缩略图 /// /// /// /// /// public BitmapImage GetHeaderThumbnail(string header, int width, int height) { var bitmap = new Bitmap(header); var thumbnail = bitmap.GetThumbnailImage(width, height, null, IntPtr.Zero); return StorageUtils.BitmapToBitmapImage(new Bitmap(thumbnail)); } /// /// 获取用户头像 /// /// /// public string GetHeader(long mid, string name, string url) { HeaderDb headerDb = new HeaderDb(); var header = headerDb.QueryByMid(mid); if (header != null) { string headerPath = $"{StorageManager.GetHeader()}/{header.Md5}"; if (File.Exists(headerPath)) { Header newHeader = new Header { Mid = mid, Name = name, Url = url, Md5 = header.Md5 }; headerDb.Update(newHeader); headerDb.Close(); return $"{StorageManager.GetHeader()}/{header.Md5}"; } else { string md5 = DownloadImage(url); if (md5 != null) { Header newHeader = new Header { Mid = mid, Name = name, Url = url, Md5 = md5 }; headerDb.Insert(newHeader); headerDb.Close(); return $"{StorageManager.GetHeader()}/{md5}"; } else { headerDb.Close(); return null; } } } else { string md5 = DownloadImage(url); if (md5 != null) { Header newHeader = new Header { Mid = mid, Name = name, Url = url, Md5 = md5 }; headerDb.Insert(newHeader); headerDb.Close(); return $"{StorageManager.GetHeader()}/{md5}"; } else { headerDb.Close(); return null; } } } /// /// 下载图片 /// /// /// private string DownloadImage(string url) { string localFile = Path.GetTempPath() + Guid.NewGuid().ToString("N"); // 下载 bool isSuccessed = StorageUtils.DownloadImage(url, localFile); if (isSuccessed) { try { string md5 = Hash.GetMD5HashFromFile(localFile); if (File.Exists(localFile)) { File.Move(localFile, $"{StorageManager.GetHeader()}/{md5}"); return md5; } else { return null; } } catch (Exception e) { Utils.Debug.Console.PrintLine("DownloadImage()发生异常: {0}", e); LogManager.Error("StorageHeader", e); return null; } } return null; } } }