檢索上傳文件在服務器文件夾是否已存在

MobileFileQuery.CS(數據層)

        /// <summary>

        /// 獲取指定文件夾下所有的文件名,文件地址,及文件的MD5

        /// </summary>

        /// <param name="path">文件夾地址</param>

        /// <returns></returns>

        public List<FolderFile> ListTreeShow(string path)//遞歸目錄 文件

        {

            //實例化文件夾

            DirectoryInfo theDir = new DirectoryInfo(path);

            //循環到 文件夾下所有文件的 文件名,文件地址,及文件的MD5

            List<FolderFile> dt = GetFiles(theDir.GetFiles());

            //獲取到文件夾下所有文件夾集合

            //DirectoryInfo[] subDirectories = theDir.GetDirectories();//獲得目錄

            //循環文件夾下的所有文件夾

            //foreach (DirectoryInfo dirinfo in subDirectories)

            //{

            //    //執行遞歸 自己掉自己

            //    dt = ListTreeShow(dirinfo.FullName);

            //}

            return dt;

        }

        /// <summary>

        /// 根據文件夾獲取到文件夾下的所有文件  文件名,文件地址,及文件的MD5

        /// </summary>

        /// <param name="files">文件信息集合</param>

        /// <param name="dt">數據源模型</param>

        /// <returns></returns>

        private List<FolderFile> GetFiles(FileInfo[] files)

        {

            List<FolderFile> dt = new List<FolderFile>();

            //循環文件信息

            foreach (FileInfo file in files)

            {

                FolderFile dr = new FolderFile();

                //文件所屬文件夾

                dr.FileUrl = file.Directory.ToString();

                //文件名稱

                dr.FileName = file.Name;

                //獲取文件的MD5值

                dr.FileMD5 = GetFileMD5(file.DirectoryName + "\\" + file.Name);

                dt.Add(dr);

            }

            return dt;

        }

        /// <summary>

        /// 根據傳入的文件地址獲取到 文件的MD5值

        /// </summary>

        /// <param name="path">文件地址</param>

        /// <returns></returns>

        private string GetFileMD5(string path)

        {

            try

            {

                MD5 md5 = MD5.Create();

                FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read);

                byte[] hash = md5.ComputeHash(fs);

                fs.Close();

                StringBuilder sb = new StringBuilder();

                for (int i = 0; i < hash.Length; i++)

                {

                    sb.Append(hash[i].ToString("x2"));

                }

                return sb.ToString();

            }

            catch (Exception ex)

            {

                return "";

            }

        }

        /// <summary>

        /// 根據文件的Stream獲取文件MD5值

        /// </summary>

        /// <param name="fileStream"></param>

        /// <returns></returns>

        public string GetFileMD5ByStream(Stream fileStream)

        {

            System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();

            byte[] retVal = md5.ComputeHash(fileStream);

            fileStream.Close();

            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < retVal.Length; i++)

            {

                sb.Append(retVal[i].ToString("x2"));

            }

            string fileMD5 = sb.ToString();

            return fileMD5;

        }

 

MobileFileServiceAdapter.CS(邏輯層)

        /// <summary>

        /// 判斷上傳文件是否已在文件夾存在(存在返回已存在文件相關信息,未存在返回上傳文件的MD5值)

        /// </summary>

        /// <param name="fileStream">文件Stream</param>

        /// <param name="FolderPath">文件夾絕對路徑</param>

        /// <returns></returns>

        public FolderFile IsExists(Stream fileStream, string FolderPath)

        {

            //上傳文件文件MD5

            string fileMD5 = _mobileFileQuery.GetFileMD5ByStream(fileStream);

            //文件夾內文件集

            List<FolderFile> FilesList = _mobileFileQuery.ListTreeShow(FolderPath);

            FolderFile file = FilesList.Where(a => a.FileMD5.Equals(fileMD5)).FirstOrDefault();

            if (file == null)

            {

                file = new FolderFile() { FileMD5 = fileMD5 };

            }

            return file;

        }

 

控制器調用(部分代碼)

var files = Request.Files;

if (files == null) return Json("Error", JsonRequestBehavior.AllowGet);

var uploadfile = files[0];

Stream filesMD5 = uploadfile.InputStream;

String FolderPath= C:/xx/xx;

FolderFile filesMD5= _mobileFileServiceAdapter. IsExists(filesMD5,FolderPath);

 

Entity

public class FolderFile

    {

        /// <summary>

        /// 文件所屬文件夾

        /// </summary>

        public string FileUrl { get; set; }

        /// <summary>

        /// 文件名稱

        /// </summary>

        public string FileName { get; set; }

        /// <summary>

        /// 文件的MD5值

        /// </summary>

        public string FileMD5 { get; set; }

    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章