示例#1
0
        public override void ExportSingleCover(object idRecord)
        {
            string ID     = idRecord.ToString();
            int    IDMAIN = int.Parse(ID.Substring(ID.IndexOf("_") + 1));
            //int IDMAIN = (int)idRecord;

            string LoginPath = @"\\" + AppSettings.IPAddressFileServer + @"\BookAddInf";

            using (new NetworkConnection(LoginPath, new NetworkCredential(AppSettings.LoginFileServerReadWrite, AppSettings.PasswordFileServerReadWrite)))
            {
                string NewPath = VuFindConverter.GetCoverExportPath(this.Fund + "_" + IDMAIN);
                string path    = @"\\" + AppSettings.IPAddressFileServer + @"\BookAddInf\" + Fund.ToUpper() + @"\" + NewPath;


                DirectoryInfo di = new DirectoryInfo(path);
                if (!di.Exists)
                {
                    di.Create();
                }
                FileInfo[] ExistingCovers;

                ExistingCovers = di.GetFiles();

                List <string> MD5Hashes = new List <string>();

                foreach (FileInfo file in ExistingCovers)
                {
                    MD5Hashes.Add(Extensions.CalculateMD5(file.FullName));//собираем хэши существующих обложек
                }

                //BJDatabaseWrapper wrapper = new BJDatabaseWrapper(Fund);
                DataTable pics = BJLoader.GetImage(IDMAIN);
                foreach (DataRow pic in pics.Rows)//Копируем считанные из базы обложки на файловое хранилище
                {
                    byte[] p = (byte[])pic["PIC"];
                    Image  img;
                    using (MemoryStream ms = new MemoryStream(p))
                    {
                        img = Image.FromStream(ms);
                    }

                    StringBuilder fileName = new StringBuilder();
                    fileName.Append(path).Append("cover.").Append("jpg"); //вроде в базе bj все обложки jpg...

                    if (!File.Exists(path + "cover.jpg"))                 //если нет файла с таким именем, значит нет обложки. сразу сохраняем
                    {
                        //img.Save(path + "cover.jpg");

                        using (FileStream fs = new FileStream(path + "cover.jpg", FileMode.Create, FileAccess.Write))
                        {
                            fs.Write(p, 0, p.Length);
                            fs.Flush();
                        }
                        if (img != null)
                        {
                            img.Dispose();
                        }
                        continue;
                    }
                    else
                    {
                        //там уже могут лежать какие-то поэтому надо сравнивать MD5 хэши, чтобы дублей не запилить
                        string imgMD5 = Extensions.CalculateMD5(p);
                        if (MD5Hashes.Contains(imgMD5))//нашлась такая же обложка, значит её не сохраняем и пропускаем
                        {
                            if (img != null)
                            {
                                img.Dispose();
                            }
                            continue;
                        }

                        while (true)//если до сюда дошло, значит надо сохранить во что бы то ни стало
                        {
                            int i = 0;
                            if (!File.Exists(path + (++i).ToString() + ".jpg"))
                            {
                                string filename = path + (i).ToString() + ".jpg";
                                //img.Save(filename, ImageFormat.Jpeg);
                                using (FileStream fs = new FileStream(filename, FileMode.Create, FileAccess.Write))
                                {
                                    fs.Write(p, 0, p.Length);
                                    fs.Flush();
                                }
                                break;
                            }
                        }
                    }
                    if (img != null)
                    {
                        img.Dispose();
                    }
                }
            }
        }