Exemplo n.º 1
0
        static void Main(string[] args)
        {
            /*speechRecognizer.SpeechRecognized += process;
             *
             * GrammarBuilder grammarBuilder = new GrammarBuilder();
             * Choices commandChoices = new Choices("weight", "color", "size");
             * grammarBuilder.Append(commandChoices);
             *
             * Choices valueChoices = new Choices();
             * valueChoices.Add("normal", "bold");
             * valueChoices.Add("red", "green", "blue");
             * valueChoices.Add("small", "medium", "large");
             * grammarBuilder.Append(valueChoices);
             *
             * speechRecognizer.LoadGrammar(new Grammar(grammarBuilder));
             * speechRecognizer.SetInputToDefaultAudioDevice();*/

            //request drive letter
            Console.WriteLine("Input Main Drive Letter");
            string input = Console.ReadLine();

            while (input.Length > 1 || input.Length < 1)
            {
                Console.WriteLine("Invalid drive letter! Please use single letter (ex. \'C\')");
                Console.WriteLine("Input Main Drive Letter");
                input = Console.ReadLine();
            }
            sf = new SystemFiles(input);
            Console.Clear();
            while (true)
            {
                Run();
            }
        }
Exemplo n.º 2
0
        protected string GetFilePath(SystemFiles file)
        {
            var filePath = string.Empty;

            if (file.FileCompressStatus == Model.EnumFileCompressStatus.Compressed)
            {
                // 如果文件已经被归档,需要先将文件解压到初始根目录

                DepressFile(new List <int>()
                {
                    file.Id
                });
            }

            // 在初始上传根目录上寻找文件
            filePath = Path.Combine(AppConfig.FileUploadRootDirectory, file.FilePath);

            if (File.Exists(filePath))
            {
                return(filePath);
            }

            // 在图片压缩目录中寻找文件
            filePath = Path.Combine(AppConfig.FileCompressRootDirectory, file.FilePath);

            if (File.Exists(filePath))
            {
                return(filePath);
            }

            throw new Exception($"{file.FileLongName}在服务器上找不到");
        }
Exemplo n.º 3
0
        public FileResult GetZipFileToken(List <FileToken> fileTokeList)
        {
            var Result      = new FileResult();
            var systemFiles = new SystemFiles();

            try
            {
                if (fileTokeList == null || !fileTokeList.Any())
                {
                    throw new Exception("参数集合为空");
                }

                var token = this.GenerateToken(fileTokeList[0]);

                cacheManager.Set(token, string.Join(",", fileTokeList.Select(s => s.FileId)));

                var tokenObj = new FileToken()
                {
                    Url = $"{AppConfig.FileCenterDomain}/file/GetZipFile?token={HttpUtility.UrlEncode(token)}"
                };

                Result.Status  = "1";
                Result.Message = "SUCCESS";
                Result.Result  = JsonConvert.SerializeObject(tokenObj);

                return(Result);
            }
            catch (Exception er)
            {
                Result.Status  = "0";
                Result.Message = er.Message;
                return(Result);
            }
        }
Exemplo n.º 4
0
        public IHttpActionResult GetFile(string id)
        {
            HttpResponseMessage httpResponseMessage = null;

            try
            {
                SystemFiles systemFiles = null;


                if (string.IsNullOrEmpty(id))
                {
                    throw new Exception("参数不正确!");
                }
                var fileId = id;
                int Id     = 0;
                if (int.TryParse(fileId, out Id))
                {
                    // 传入的id是int类型,说明是Id字段
                    systemFiles = dbContext.SystemFiles.FirstOrDefault(s => s.Id == Id);
                }
                else
                {
                    // 传入的id不是int类型,说明是FileId字段
                    systemFiles = dbContext.SystemFiles.FirstOrDefault(s => s.FileId == new Guid(fileId));
                }

                var filePath = this.GetFilePath(systemFiles);

                LogHelper.Info($"FileName:{systemFiles.FileName}");

                var browser = String.Empty;
                if (HttpContext.Current.Request.UserAgent != null)
                {
                    browser = HttpContext.Current.Request.UserAgent.ToUpper();
                }

                var fileName = browser.Contains("FIREFOX") ? HttpUtility.UrlEncode(systemFiles.FileName, Encoding.UTF8) : HttpUtility.UrlEncode(Path.GetFileName(systemFiles.FileName), Encoding.UTF8);

                httpResponseMessage = new HttpResponseMessage(HttpStatusCode.OK);
                FileStream fileStream = File.OpenRead(filePath);
                httpResponseMessage.Content = new StreamContent(fileStream);
                httpResponseMessage.Content.Headers.Add("FileName", fileName);
                httpResponseMessage.Content.Headers.ContentType        = new MediaTypeHeaderValue("application/octet-stream");
                httpResponseMessage.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                {
                    FileName = fileName
                };


                return(ResponseMessage(httpResponseMessage));
            }
            catch (Exception ex)
            {
                httpResponseMessage         = new HttpResponseMessage(HttpStatusCode.InternalServerError);
                httpResponseMessage.Content = new StringContent(ex.Message);

                return(ResponseMessage(httpResponseMessage));
            }
        }
Exemplo n.º 5
0
        public IHttpActionResult DownloadBigFile(PartialFileModel partialFileModel)
        {
            HttpResponseMessage httpResponseMessage = null;

            try
            {
                SystemFiles systemFiles = null;

                if (partialFileModel.Id != 0)
                {
                    // 传入的id是int类型,说明是Id字段
                    systemFiles = dbContext.SystemFiles.FirstOrDefault(s => s.Id == partialFileModel.Id);
                }
                else if (partialFileModel.FileId.HasValue && partialFileModel.FileId != Guid.Empty)
                {
                    // 传入的id不是int类型,说明是FileId字段
                    systemFiles = dbContext.SystemFiles.FirstOrDefault(s => s.FileId == partialFileModel.FileId);
                }
                else
                {
                    throw new Exception("传入文件Id无效");
                }

                var filePath = this.GetFilePath(systemFiles);

                LogHelper.Info($"FileName:{systemFiles.FileName}");

                var browser = String.Empty;

                if (HttpContext.Current.Request.UserAgent != null)
                {
                    browser = HttpContext.Current.Request.UserAgent.ToUpper();
                }

                httpResponseMessage = new HttpResponseMessage(HttpStatusCode.OK);
                FileStream fileStream = File.OpenRead(filePath);
                httpResponseMessage.Content = new StreamContent(fileStream);
                httpResponseMessage.Content.Headers.ContentType        = new MediaTypeHeaderValue("application/octet-stream");
                httpResponseMessage.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                {
                    FileName = browser.Contains("FIREFOX") ? systemFiles.FileName : HttpUtility.UrlEncode(Path.GetFileName(systemFiles.FileName))
                };

                return(ResponseMessage(httpResponseMessage));
            }
            catch (Exception ex)
            {
                httpResponseMessage         = new HttpResponseMessage(HttpStatusCode.InternalServerError);
                httpResponseMessage.Content = new StringContent(ex.Message);

                return(ResponseMessage(httpResponseMessage));
            }
        }
Exemplo n.º 6
0
        public FileResult GetFileTokenList(List <FileToken> fileTokeList)
        {
            var Result      = new FileResult();
            var systemFiles = new SystemFiles();

            try
            {
                if (fileTokeList == null || !fileTokeList.Any())
                {
                    throw new Exception("参数集合为空");
                }

                using (FileCenterDbContext dbContext = new FileCenterDbContext())
                {
                    foreach (var item in fileTokeList)
                    {
                        // 解密获取真正的FileId
                        item.FileId = rsaManager.RSADecrypt(File.ReadAllText(AppConfig.PrivateKeyFilePath), item.FileId);
                        item.Token  = this.GenerateToken(item);
                        item.Url    = $"{AppConfig.FileCenterDomain}/file/GetFile?token={HttpUtility.UrlEncode(item.Token)}";

                        int Id = 0;
                        if (int.TryParse(item.FileId, out Id))
                        {
                            // 传入的id是int类型,说明是Id字段
                            systemFiles = dbContext.SystemFiles.FirstOrDefault(s => s.Id == Id);
                        }
                        else
                        {
                            // 传入的id不是int类型,说明是FileId字段
                            systemFiles = dbContext.SystemFiles.FirstOrDefault(s => s.FileId == new Guid(item.FileId));
                        }

                        item.FileName = systemFiles.FileName;

                        cacheManager.Set(item.Token, item.FileId);
                    }

                    Result.Status  = "1";
                    Result.Message = "SUCCESS";
                    Result.Result  = JsonConvert.SerializeObject(fileTokeList);
                    return(Result);
                }
            }
            catch (Exception er)
            {
                Result.Status  = "0";
                Result.Message = er.Message;
                return(Result);
            }
        }
Exemplo n.º 7
0
 public override bool EnsureEnvironment(out IEnumerable <string> errors)
 {
     // Test creating/saving/deleting a file in the same location as the content xml file
     // NOTE: We cannot modify the xml file directly because a background thread is responsible for
     // that and we might get lock issues.
     try
     {
         XmlStore.EnsureFilePermission();
         errors = Enumerable.Empty <string>();
         return(true);
     }
     catch
     {
         errors = new[] { SystemFiles.GetContentCacheXml(_globalSettings) };
         return(false);
     }
 }
Exemplo n.º 8
0
        protected string GetFilePath(SystemFiles file)
        {
            var filePath = string.Empty;

            // 在初始上传根目录上寻找文件
            filePath = Path.Combine(AppConfig.FileUploadRootDirectory, file.FilePath);

            if (File.Exists(filePath))
            {
                return(filePath);
            }

            // 在图片压缩目录中寻找文件
            filePath = Path.Combine(AppConfig.FileCompressRootDirectory, file.FilePath);

            if (File.Exists(filePath))
            {
                return(filePath);
            }

            throw new Exception($"{file.FileLongName}在服务器上找不到");
        }
Exemplo n.º 9
0
        /// <summary>
        /// 合并文件
        /// </summary>
        private void Merge(PartialFileModel partialFileModel)
        {
            var mergeFileBytes  = new List <byte>();
            var partialFileList = new List <FileInfo>();

            // 取得分片文件内容,拼接成初始文件
            for (int i = 0; i < partialFileModel.PartialCount; i++)
            {
                var file = new FileInfo($"{AppConfig.BigFileTempStorage}\\{partialFileModel.FileId}_{i}");

                using (var tf = file.OpenRead())
                {
                    var blockBytes = new byte[tf.Length];

                    tf.Read(blockBytes, 0, blockBytes.Length);

                    mergeFileBytes.AddRange(blockBytes);
                }

                partialFileList.Add(file);
            }

            // 保存初始上传大文件
            SystemFiles systemFiles = new SystemFiles();

            var FolderName = ConfigurationManager.AppSettings[partialFileModel.ProjectName];

            if (FolderName == null)
            {
                FolderName = partialFileModel.ProjectName;
            }

            string day      = DateTime.Now.ToString("yyyyMMdd");
            string folder   = FolderName + "/" + day;
            string filePath = $"{AppConfig.FileUploadRootDirectory}/{folder}";

            if (Directory.Exists(filePath) == false)// 如果不存在就创建file文件夹
            {
                Directory.CreateDirectory(filePath);
            }
            string longName     = Guid.NewGuid().ToString();
            string SaveFileName = longName + partialFileModel.FileExtension; // 保存文件名称

            using (FileStream fs = File.Create(filePath + "/" + SaveFileName))
            {
                fs.Write(mergeFileBytes.ToArray(), 0, mergeFileBytes.Count);
            }

            systemFiles = new SystemFiles()
            {
                FileId              = partialFileModel.FileId,
                FileData            = null,
                FilePath            = folder + "/" + SaveFileName,
                FileExtension       = partialFileModel.FileExtension,
                FileName            = partialFileModel.FileName,
                FileLongName        = SaveFileName,
                FileSize            = mergeFileBytes.Count,
                ProjectName         = partialFileModel.ProjectName,
                CreateDate          = DateTime.Now,
                FileCompressStatus  = EnumFileCompressStatus.Uncompressed,
                TobeArchiveDateTime = DateTime.Now.AddDays((int)EnumArchivePeriod.Quarter)
            };

            dbContext.SystemFiles.Add(systemFiles);

            dbContext.SaveChanges();

            partialFileModel.Id = systemFiles.Id;

            // 删除上传的分片小文件
            foreach (var file in partialFileList)
            {
                if (file.Exists)
                {
                    file.Delete();
                }
            }
        }
Exemplo n.º 10
0
        public IHttpActionResult UploadFile([FromUri] SystemFilesView model)
        {
            var result = new FileResult();

            try
            {
                SystemFiles systemFiles = new SystemFiles();

                var FolderName = ConfigurationManager.AppSettings[model.ProjectName];

                if (FolderName == null)
                {
                    FolderName = model.ProjectName;
                }

                var day        = DateTime.Now.ToString("yyyyMMdd");
                var folder     = FolderName + "/" + day;
                var filePath   = AppConfig.FileUploadRootDirectory + "/" + folder;
                var dataLength = 0L;

                if (Directory.Exists(filePath) == false)// 如果不存在就创建file文件夹
                {
                    Directory.CreateDirectory(filePath);
                }
                string longName     = Guid.NewGuid().ToString();
                string SaveFileName = longName + model.FileExtension; // 保存文件名称

                using (var destinationStream = File.Create(filePath + "/" + SaveFileName))
                    using (var sourceStream = Request.Content.ReadAsStreamAsync().Result)
                    {
                        // TODO:添加一个BufferStream缓冲,减少I/O压力
                        sourceStream.CopyTo(destinationStream);

                        dataLength = sourceStream.Length;
                    }

                var tobeArchiveDateTime = (model.ArchivePeriod == EnumArchivePeriod.Never || IsImage(model)) ? DateTime.MaxValue : DateTime.Now.AddDays((int)model.ArchivePeriod);

                systemFiles = new SystemFiles()
                {
                    FileId              = Guid.NewGuid(),
                    FileData            = null,
                    FilePath            = folder + "/" + SaveFileName,
                    FileExtension       = model.FileExtension,
                    FileName            = model.FileName,
                    FileLongName        = SaveFileName,
                    FileSize            = (int)dataLength,
                    ProjectName         = model.ProjectName,
                    CreateDate          = DateTime.Now,
                    FileCompressStatus  = EnumFileCompressStatus.Uncompressed,
                    TobeArchiveDateTime = tobeArchiveDateTime
                };

                using (FileCenterDbContext dbContext = new FileCenterDbContext())
                {
                    dbContext.SystemFiles.Add(systemFiles);
                    dbContext.SaveChanges();
                }

                result.Status  = AppConfig.ReturnResult.Status_Success;
                result.Message = AppConfig.ReturnResult.Message_Success;
                result.Result  = JsonConvert.SerializeObject(systemFiles);

                return(Json(result));
            }
            catch (Exception ex)
            {
                result.Status  = AppConfig.ReturnResult.Status_Failure;
                result.Message = ex.Message;

                return(Json(result));
            }
        }
Exemplo n.º 11
0
        public IHttpActionResult GetFile(string token, string type = "")
        {
            HttpResponseMessage httpResponseMessage = null;

            try
            {
                SystemFiles systemFiles = null;

                //根据token获取存储的fileId
                var fileId = this.cacheManager.Get <string>(token);

                if (string.IsNullOrEmpty(fileId))
                {
                    throw new Exception("Token已无效,请进入业务系统下载文件。");
                }

                int Id = 0;
                if (int.TryParse(fileId, out Id))
                {
                    // 传入的id是int类型,说明是Id字段
                    systemFiles = dbContext.SystemFiles.FirstOrDefault(s => s.Id == Id);
                }
                else
                {
                    // 传入的id不是int类型,说明是FileId字段
                    systemFiles = dbContext.SystemFiles.FirstOrDefault(s => s.FileId == new Guid(fileId));
                }

                var filePath = this.GetFilePath(systemFiles);

                LogHelper.Info($"FileName:{HttpUtility.UrlEncode(systemFiles.FileName, Encoding.UTF8)}");

                var browser = String.Empty;
                if (HttpContext.Current.Request.UserAgent != null)
                {
                    browser = HttpContext.Current.Request.UserAgent.ToUpper();
                }

                var fileName = browser.Contains("FIREFOX") ? HttpUtility.UrlEncode(systemFiles.FileName, Encoding.UTF8) : HttpUtility.UrlEncode(Path.GetFileName(systemFiles.FileName), Encoding.UTF8);

                httpResponseMessage = new HttpResponseMessage(HttpStatusCode.OK);
                FileStream fileStream = File.OpenRead(filePath);
                httpResponseMessage.Content = new StreamContent(fileStream);
                httpResponseMessage.Content.Headers.Add("FileName", fileName);
                httpResponseMessage.Content.Headers.ContentType        = new MediaTypeHeaderValue("application/octet-stream");
                httpResponseMessage.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                {
                    FileName = fileName
                };

                // 是否只允许下载一次
                if (AppConfig.AllowDownloadOnce)
                {
                    // 移除token
                    this.cacheManager.Remove(token);
                }

                return(ResponseMessage(httpResponseMessage));
            }
            catch (Exception ex)
            {
                httpResponseMessage         = new HttpResponseMessage(HttpStatusCode.InternalServerError);
                httpResponseMessage.Content = new StringContent(ex.Message);

                return(ResponseMessage(httpResponseMessage));
            }
        }