Beispiel #1
0
        /// <summary>
        /// 获取文件实际所在服务器的位置
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        private string GetFileFullPath(string fileName)
        {
            int fileID = FileHelper.GetFileId(fileName);
            var file   = entities.FsFile.Where(c => c.Id == fileID).SingleOrDefault();

            var server = entities.FsServer.Where(c => c.IsMaster == "1").First();


            if (!file.FileServerNames.Split(',').Contains(server.ServerName))
            {
                string serverName = file.FileServerNames.Split(',').First();
                server = entities.FsServer.Where(c => c.ServerName == serverName).SingleOrDefault();
            }


            FileService.InnerService innerService = new FileService.InnerService();
            innerService.Url = server.HttpUrl;

            foreach (var item in entities.FsRootFolder.Where(c => c.ServerId == server.Id).ToArray())
            {
                string fileFullPath = FileHelper.GetFileFullPath(item.RootFolderPath, file.Name, file.Guid, item.AllowEncrypt == "1");
                if (FileHelper.FileExist(fileFullPath))
                {
                    string currentFsServerName = System.Configuration.ConfigurationManager.AppSettings["FS_ServerName"];
                    return(entities.FsServer.Where(c => c.ServerName == currentFsServerName).SingleOrDefault().HttpUrl + "@" + fileFullPath);
                }
                else if (innerService.ExistFile(fileFullPath))
                {
                    return(server.HttpUrl + "@" + fileFullPath);
                }
            }

            //throw new Exception(string.Format("文件'{0}'在服务器'{1}'上不存在", file.Name, server.ServerName));
            return("@");
        }
Beispiel #2
0
        /// <summary>
        /// 本地化文件,仅供主服务器调用
        /// </summary>
        /// <param name="fileName"></param>
        public MasterService.FsFileInfo LocalizeFile(string fileName)
        {
            MasterService.FsFileInfo fileInfo = masterService.GetFileInfo(fileName, FileStoreConfig.FileServerName);

            string localFilePath = GetLocalFilePath(fileInfo.FileFullPathList);

            if (localFilePath != "")
            {
                fileInfo.FileFullPath = localFilePath;
                return(fileInfo);
            }

            FileService.InnerService innerService = new FileService.InnerService();
            innerService.Url = fileInfo.SrcFileServiceUrl;

            int pos    = 0;
            int length = 1024 * 1024;

            byte[] bytes = innerService.GetFileBytes(fileInfo.SrcFileFullPath, pos, length);
            while (bytes.Length > 0)
            {
                FileHelper.SaveFile(fileInfo.FileFullPath, bytes, fileInfo.FileSize, pos);
                pos  += length;
                bytes = innerService.GetFileBytes(fileInfo.SrcFileFullPath, pos, length);
            }

            masterService.UpdateFileServerNames(fileName, FileStoreConfig.FileServerName);

            return(fileInfo);
        }
Beispiel #3
0
        /// <summary>
        /// 本地化文件,仅供主服务器调用
        /// </summary>
        /// <param name="fileName"></param>
        public MasterService.FsFileInfo LocalizeFile(string fileName)
        {
            MasterService.FsFileInfo fileInfo = masterService.GetFileInfo(fileName, FileStoreConfig.FileServerName);

            //判断文件是否在本地
            if (File.Exists(fileInfo.SrcFileFullPath))
            {
                fileInfo.FileFullPath = fileInfo.SrcFileFullPath;
                return(fileInfo);
            }

            string localFilePath = GetLocalFilePath(fileInfo.FileFullPathList);

            if (localFilePath != "")
            {
                fileInfo.FileFullPath = localFilePath;
                return(fileInfo);
            }

            if (string.IsNullOrEmpty(fileInfo.SrcFileServiceUrl))
            {
                throw new Exception("所有服务器上没有找到物理文件【" + fileName + "】");
            }

            FileService.InnerService innerService = new FileService.InnerService();
            innerService.Url = fileInfo.SrcFileServiceUrl;

            int pos    = 0;
            int length = 1024 * 1024;

            byte[] bytes = innerService.GetFileBytes(fileInfo.SrcFileFullPath, pos, length);
            while (bytes.Length > 0)
            {
                FileHelper.SaveFile(fileInfo.FileFullPath, bytes, fileInfo.FileSize, pos);
                pos  += length;
                bytes = innerService.GetFileBytes(fileInfo.SrcFileFullPath, pos, length);
            }

            masterService.UpdateFileServerNames(fileName, FileStoreConfig.FileServerName);

            return(fileInfo);
        }
Beispiel #4
0
        public void DeletePhysicalFile(string fileName)
        {
            int fileID = FileHelper.GetFileId(fileName);
            var file   = entities.FsFile.Where(c => c.Id == fileID).SingleOrDefault();

            FileService.InnerService innerService = new FileService.InnerService();
            foreach (var item in entities.FsServer.ToList())
            {
                //记录日志
                logFO.AddLog(fileName, "DeletePhysicalFile", "");

                innerService.Url = item.HttpUrl;

                var rootFolder = GetAvailableRootFolder(item.ServerName, file.Src, file.ExtName);



                innerService.DeletePhysicalFile(FileHelper.GetFileFullPath(rootFolder.RootFolderPath, file.Name, file.Guid, rootFolder.AllowEncrypt == "1"));
            }
        }