/// <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("@"); }
/// <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); }
/// <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); }
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")); } }