public virtual bool CloseCreateFile() { bool result = false; UserInfo user = SessionUtils.UserInfo; if (user != null && user.File.OpenType == FileOpenType.Write) { try { TempFileDto tempDto = new TempFileDto() { Directory = user.File.Directory, Name = user.File.Name, Length = user.File.Length, CreationTime = user.File.CreationTime, LastWriteTime = user.File.LastWriteTime, TempIndex = user.File.Position, TempName = user.File.TempName }; var tempFileRepository = this.GetRepository <ITempFileRepository>(); tempFileRepository.AddOrUpdate(tempDto); string log = string.Format("关闭上传文件, Directory: {0}, Name: {1}, Length: {2}, Position: {3}, CreationTime: {4:yyyy-MM-dd HH:mm:ss}, LastWriteTime: {5:yyyy-MM-dd HH:mm:ss}", user.File.Directory, user.File.Name, user.File.Length, user.File.Position, user.File.CreationTime, user.File.LastWriteTime); OptionLogService.Instance.Add(OptionLogType.CloseCreateFile, log); result = true; } catch { } user.File.Dispose(); } return(result); }
public virtual TempFileDto Get(string directory, string name) { TempFileDto vm = null; if (!string.IsNullOrEmpty(name)) { directory = Utils.FormatDirectory(directory); name = Utils.FormatName(name); using (var db = this.CreateDbContext()) { var query = from q in db.TempFile where q.Directory == directory && q.Name == name select new TempFileDto { Id = q.Id, Directory = q.Directory, Name = q.Name, Length = q.Length, CreationTime = q.CreationTime, LastWriteTime = q.LastWriteTime, TempIndex = q.TempIndex, TempName = q.TempName, UpdateTime = q.UpdateTime }; vm = query.FirstOrDefault(); } } return(vm); }
public virtual int AddOrUpdate(TempFileDto vm) { int count = 0; if (vm != null && !string.IsNullOrEmpty(vm.Name)) { vm.Directory = Utils.FormatDirectory(vm.Directory); vm.Name = Utils.FormatName(vm.Name); using (var db = this.CreateDbContext()) { db.Configuration.AutoDetectChangesEnabled = true; using (db.BeginTransaction(System.Data.IsolationLevel.Serializable)) { var m = db.TempFile.Where(q => q.Directory == vm.Directory && q.Name == vm.Name).FirstOrDefault(); if (m == null) { m = new TempFile(); } m.Directory = vm.Directory; m.Name = vm.Name; m.Length = vm.Length; m.CreationTime = vm.CreationTime; m.LastWriteTime = vm.LastWriteTime; m.TempIndex = vm.TempIndex; m.TempName = vm.TempName; m.UpdateTime = DateTime.Now; if (m.Id == 0) { db.TempFile.Add(m); } count += db.SaveChanges(); db.Commit(); vm.Id = m.Id; vm.UpdateTime = m.UpdateTime; } } } return(count); }
public virtual bool CreateFile(CreateFileParamDto vm, out FileDataParamDto fileDataParam) { bool result = false; fileDataParam = null; UserInfo user = SessionUtils.UserInfo; if (user.File.OpenType == FileOpenType.None && !string.IsNullOrEmpty(vm.Name) && vm.CreationTime != DateTime.MinValue && vm.LastWriteTime != DateTime.MinValue) { DateTime createtime = vm.CreationTime; DateTime lasttime = vm.LastWriteTime; if (ConfigUtils.DatabaseType == DatabaseType.Oracle) { createtime = DateTime.Parse(vm.CreationTime.ToString("yyyy-MM-dd HH:mm:ss")); lasttime = DateTime.Parse(vm.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss")); } string tempFullName = null; var repository = this.GetRepository <ITempFileRepository>(); var tempDto = repository.Get(vm.Directory, vm.Name); if (tempDto == null || tempDto.Length == 0 || tempDto.Length != vm.Length || tempDto.CreationTime != createtime || tempDto.LastWriteTime != lasttime || !File.Exists(Utils.Combine(ConfigUtils.TempDirectory, tempDto.TempName))) { if (tempDto != null) { repository.Delete(tempDto.Id); tempFullName = Utils.Combine(ConfigUtils.TempDirectory, tempDto.TempName); if (File.Exists(tempFullName)) { try { File.Delete(tempFullName); } catch { } } } tempDto = new TempFileDto() { TempIndex = 0, TempName = Guid.NewGuid().ToString("n") + ".t" }; } FileStream fs = null; tempFullName = Utils.Combine(ConfigUtils.TempDirectory, tempDto.TempName); try { if (File.Exists(tempFullName)) { fs = File.OpenWrite(tempFullName); if (tempDto.TempIndex > 0) { fs.Seek(tempDto.TempIndex, SeekOrigin.Begin); } } else { if (!Directory.Exists(ConfigUtils.TempDirectory)) { Directory.CreateDirectory(ConfigUtils.TempDirectory); } fs = File.Create(tempFullName); if (vm.Length > 0) { fs.SetLength(vm.Length); } } //FileInfoRepository.Instance.Delete(vm.Directory, vm.Name, (int)FileInfoType.File); //string fullName = PathUtils.Combine(ConfigUtils.FileRootPath, user.File.Directory, user.File.Name); //if (File.Exists(fullName)) File.Delete(fullName); user.File.Directory = vm.Directory; user.File.Name = vm.Name; user.File.Length = vm.Length; user.File.CreationTime = vm.CreationTime; user.File.LastWriteTime = vm.LastWriteTime; user.File.Position = fs.Position; user.File.TempName = tempDto.TempName; user.File.Stream = fs; user.File.OpenType = FileOpenType.Write; fileDataParam = new FileDataParamDto() { Index = user.File.Position, Size = ConfigUtils.MAX_FILE_DATA_SIZE }; result = true; string log = string.Format("创建上传文件, Directory: {0}, Name: {1}, Length: {2}, Position: {3}, CreationTime: {4:yyyy-MM-dd HH:mm:ss}, LastWriteTime: {5:yyyy-MM-dd HH:mm:ss}", user.File.Directory, user.File.Name, user.File.Length, user.File.Position, user.File.CreationTime, user.File.LastWriteTime); new OptionLogService().Add(OptionLogType.CreateFile, log); } catch (Exception ex) { try { if (fs != null) { fs.Close(); } if (tempDto.Id == 0) { File.Delete(tempFullName); } } catch { } throw ex; } } return(result); }