internal async Task <Guid> Save()
        {
            UserHelperFunctions userHelper = new UserHelperFunctions()
            {
                _context         = _context,
                _emailService    = _emailService,
                _securityOptions = _securityOptions,
                _user            = _user
            };

            userHelper.Populate();

            bool isNew = false;

            if (IsUploadDirectory == true)
            {
                var directories = _context.FolderDirectories.Where(x => x.FolderID == FolderID).ToList();
                foreach (var dir in directories)
                {
                    dir.IsUploadDirectory = false;
                    _context.Update(dir);
                }

                await _context.SaveChangesAsync();
            }

            var folderDir = _context.FolderDirectories.Where(x => x.FolderDirectoryID == FolderDirectoryID).FirstOrDefault();

            if (folderDir == null)
            {
                folderDir = new FolderDirectory();
                isNew     = true;
                folderDir.FolderDirectoryID = Guid.NewGuid();
                folderDir.FolderID          = FolderID;
            }

            folderDir.FolderPath         = FolderPath;
            folderDir.IsUploadDirectory  = IsUploadDirectory;
            folderDir.RequireCredentials = RequireCredentials;
            folderDir.Username           = Username;
            folderDir.Password           = Password;

            if (isNew)
            {
                _context.Add(folderDir);
            }
            else
            {
                _context.Update(folderDir);
            }

            await _context.SaveChangesAsync();

            FolderDirectoryID = folderDir.FolderDirectoryID;

            BackgroundJob.Enqueue <BackgroundJobHelper>(x => x.subRescanDirectories(FolderDirectoryID, null));

            return(FolderDirectoryID);
        }
        public async Task RescanDirectoriesLoadFiles(Guid?parentFolderDirectoryFileID, string path, FolderDirectory folderDir)
        {
            var physicalDirectories = Directory.GetDirectories(path);

            foreach (var directory in physicalDirectories)
            {
                DirectoryInfo info = new DirectoryInfo(directory);

                var dirFile = new FolderDirectoryFile()
                {
                    FileExtention               = "",
                    FileName                    = info.Name,
                    FolderDirectoryFileID       = Guid.NewGuid(),
                    FolderDirectoryID           = folderDir.FolderDirectoryID,
                    FullPath                    = info.FullName,
                    CreatedDate                 = info.CreationTime,
                    IsDirectory                 = true,
                    ParentFolderDirectoryFileID = parentFolderDirectoryFileID
                };

                _context.Add(dirFile);

                await _context.SaveChangesAsync();

                await RescanDirectoriesLoadFiles(dirFile.FolderDirectoryFileID, info.FullName, folderDir);
            }

            var fileScan = Directory.GetFiles(path, "", SearchOption.TopDirectoryOnly);

            foreach (var file in fileScan)
            {
                FileInfo info = new FileInfo(file);

                var dirFile = new FolderDirectoryFile()
                {
                    FileExtention         = info.Extension,
                    FileName              = info.Name,
                    FolderDirectoryFileID = Guid.NewGuid(),
                    FolderDirectoryID     = folderDir.FolderDirectoryID,
                    FullPath              = info.FullName,
                    SizeMB      = (Convert.ToDouble(info.Length) / 1024.00 / 1024.00).ToString("0.00"),
                    CreatedDate = info.CreationTime,
                    IsDirectory = false,
                    ParentFolderDirectoryFileID = parentFolderDirectoryFileID
                };

                var    provider = new FileExtensionContentTypeProvider();
                string contentType;
                if (!provider.TryGetContentType(info.FullName, out contentType))
                {
                    contentType = "application/octet-stream";
                }

                dirFile.FileType = contentType;

                _context.Add(dirFile);

                await _context.SaveChangesAsync();
            }
        }
Esempio n. 3
0
        /// <summary>遞迴讀取完整資料夾所有目錄(可疊加)</summary>
        /// <param name="tempPath">路徑字串</param>
        /// <param name="ParentGuid">最頂端父層對應guid</param>
        /// <returns>Folders[a][b] (格式string[])</returns>
        /// 可用以下方式疊加
        /// rlt.Folders = new List<object>();
        /// rlt.Folders.Add(此函數);
        public static FolderDirectory[] FolderRecursive(string tempPath, string ParentGuid, string FullPath)
        {
            //轉換路徑 (需判斷是絕對路徑還是相對路徑)
            string strPath  = "";
            string viewPath = "";

            if (System.IO.Path.IsPathRooted(ConfigurationManager.AppSettings["FilesPath"]) == true)
            {
                //絕對路徑
                strPath = ConfigurationManager.AppSettings["FilesPath"] + tempPath.Replace("/", @"\");
            }
            else
            {
                //相對路徑
                strPath = HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["FilesPath"] + tempPath);
            }
            //輸出閱覽路徑
            viewPath = ConfigurationManager.AppSettings["FilesViewPath"] + tempPath;


            List <FolderDirectory> dataList = new List <FolderDirectory>();


            //判斷檔案資料夾是否存在
            if (Directory.Exists(strPath))
            {
                //目錄(含路徑)的陣列
                string[] dirs = Directory.GetDirectories(strPath);
                //用來儲存只有目錄名的集合
                ArrayList dirlist = new ArrayList();
                foreach (string item in dirs)
                {
                    //走訪每個元素只取得目錄名稱(不含路徑)並加入dirlist集合中
                    dirlist.Add(Path.GetFileNameWithoutExtension(item));
                }

                //有資料就填入資訊
                foreach (var item in dirlist)
                {
                    DirectoryInfo theFolderInfo = new DirectoryInfo(strPath + item.ToString());

                    FolderDirectory data = new FolderDirectory();

                    string guid = Guid.NewGuid().ToString("N");

                    data.Guid                = guid;                                    //編寫對應guid
                    data.ParentGuid          = ParentGuid;                              //對應父層guid
                    data.FolderPath          = viewPath;                                //瀏覽路徑
                    data.FolderName          = item.ToString();                         //資料夾名稱
                    data.FolderLastWriteTime = theFolderInfo.LastWriteTime.ToString();  //最後一次存取的時間
                    data.FullPath            = FullPath + item.ToString() + "/";        //資料夾自己的路徑

                    dataList.Add(data);

                    //遞迴自己這個函數
                    dataList.AddRange(FolderRecursive(tempPath + "/" + item, guid, FullPath + item.ToString() + "/"));
                }
            }

            return(dataList.ToArray());
        }