public virtual bool UploadFileData(FileDataDto vm, out FileDataParamDto fileDataParam) { bool result = false; fileDataParam = null; UserInfo user = SessionUtils.UserInfo; if (vm != null && user.File.OpenType == FileOpenType.Write && user.File.Stream != null) { if (vm.Data != null && vm.Data.Length > 0 && vm.Length >= vm.Data.Length) { user.File.Stream.Seek(vm.Index, SeekOrigin.Begin); user.File.Stream.Write(vm.Data, 0, vm.Length); user.File.Stream.Flush(); } user.File.Position = user.File.Stream.Position; fileDataParam = new FileDataParamDto() { Index = user.File.Position, Size = ConfigUtils.MAX_FILE_DATA_SIZE }; result = true; } return(result); }
public ActionResult UploadFileData(FileDataDto vm) { if (vm != null && this.UserInfo.File.OpenType == FileOpenType.Write) { FileDataParamDto fileDataParam = null; var fileService = this.GetService <IFileService>(); if (fileService.UploadFileData(vm, out fileDataParam)) { return(Success(fileDataParam)); } } return(Error()); }
public ActionResult CreateFile(CreateFileParamDto vm) { if (this.UserInfo.File.OpenType != FileOpenType.None) { return(Failure("当前已打开其它文件,请先关闭其它文件!")); } if (vm != null && !string.IsNullOrEmpty(vm.Name) && vm.CreationTime != DateTime.MinValue && vm.LastWriteTime != DateTime.MinValue) { FileDataParamDto fileDataParam = null; var fileService = this.GetService <IFileService>(); if (fileService.CreateFile(vm, out fileDataParam)) { return(Success(fileDataParam)); } } return(Error()); }
public ActionResult GetFileData() { if (this.UserInfo.File.OpenType != FileOpenType.Read) { return(Failure("未打开读取文件,请先打开文件!")); } FileDataParamDto vm = this.GetData <FileDataParamDto>(); if (vm != null) { var fileService = this.GetService <IFileService>(); var m = fileService.GetFileData(vm); if (m != null) { return(Success(m)); } } return(Error()); }
public virtual FileDataDto GetFileData(FileDataParamDto vm) { FileDataDto m = null; UserInfo user = SessionUtils.UserInfo; if (user != null && vm != null && user.File.OpenType == FileOpenType.Read && user.File.Stream != null) { user.File.Stream.Seek(vm.Index, SeekOrigin.Begin); m = new FileDataDto() { Index = vm.Index }; long len = user.File.Stream.Length - user.File.Position; if (vm.Size > len) { vm.Size = Convert.ToInt32(len); } m.Data = new byte[vm.Size]; m.Length = user.File.Stream.Read(m.Data, 0, vm.Size); } return(m); }
public virtual bool GetFile(FileInfoDto m, string saveFullDirectory, string name, FilePositionCallback call = null) { bool result = false; bool isopen = false; try { if (m != null && m.Type == FileInfoType.File && !string.IsNullOrEmpty(saveFullDirectory) && this.Client.IsLogin) { if (!Directory.Exists(saveFullDirectory)) { Directory.CreateDirectory(saveFullDirectory); } if (this.Client.Host == "127.0.0.1" || this.Client.Host == "localhost") { result = this.GetLocalFile(m, saveFullDirectory, call); } else { long position = 0; this.OnFilePositionCallback(call, m.Length, position); var fs = this.CreateFile(m, saveFullDirectory, name, out position); if (m.Length == position && fs == null) { this.OnFilePositionCallback(call, m.Length, position); result = true; } else if (fs != null) { using (fs) { isopen = this.Client.Request <bool, int>(MsgCmd.OpenFile, m.Id); if (isopen) { FileDataParamDto getDto = new FileDataParamDto(); while (position < m.Length) { bool isContinue = this.OnFilePositionCallback(call, m.Length, position); getDto.Index = position; getDto.Size = MAX_FILE_DATA_SIZE; FileDataDto dataDto = this.Client.Request <FileDataDto, FileDataParamDto>(MsgCmd.GetFileData, getDto); if (dataDto != null && isContinue) { fs.Seek(position, SeekOrigin.Begin); if (dataDto.Length > 0 && dataDto.Data != null && dataDto.Length >= dataDto.Data.Length) { fs.Write(dataDto.Data, 0, dataDto.Length); fs.Flush(); } position = position + dataDto.Length; } else { break; } } this.Client.Request(MsgCmd.CloseFile); string saveFile = Utils.Combine(saveFullDirectory, m.Name); string tempFile = saveFile + FILE_TEMP_SUFFIX; string indexFile = saveFile + FILE_INDEX_SUFFIX; File.WriteAllText(indexFile, position.ToString() + " " + JsonUtils.Serialize(m), Encoding.UTF8); fs.Close(); if (position >= m.Length) { this.OnFilePositionCallback(call, m.Length, position); if (File.Exists(saveFile)) { File.Delete(saveFile); } File.Move(tempFile, Utils.Combine(saveFullDirectory, name)); File.Delete(indexFile); result = true; } } } } } } } catch (Exception ex) { if (isopen) { this.Client.Request(MsgCmd.CloseFile); } LogUtils.Error("【FileInfoClient.GetFile】", ex); } return(result); }
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); }