コード例 #1
0
        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);
        }
コード例 #2
0
        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());
        }
コード例 #3
0
        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());
        }
コード例 #4
0
        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());
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }