Esempio n. 1
0
        private void CreateStreamWriter()
        {
            lock (CreationLock)
            {
                if (StreamOk)
                {
                    return;
                }

                var directory = new DirectoryInfo(_directory);

                var lastFile = directory.GetFiles()
                               .Where(file => file.FullName.EndsWith(".log"))
                               .OrderByDescending(f => f.LastWriteTime)
                               .FirstOrDefault()?.Name;
                var opened = false;
                if (!string.IsNullOrEmpty(lastFile))
                {
                    try
                    {
                        Console.WriteLine("Using existing log file: " + lastFile);
                        TryOpenStream(lastFile);
                        _logFileSize = (ulong)_streamWriter.BaseStream.Length;
                        opened       = true;
                        if (_logFileSize > MaxLogFileSize)
                        {
                            Console.WriteLine("Or not, it is already too big.");
                            _streamWriter.Close();
                            _streamWriter = null;
                            opened        = false;
                        }
                    }
                    catch (Exception exc)
                    {
                        Console.WriteLine("Can't use existing log file: " + exc.Message);
                    }
                }


                if (!opened)
                {
                    var dt          = DateTime.Now;
                    var logFileName = $"Log_{dt:yyyy-MM-dd_HH-mm-ss}_{Utilis.GenerateRandomHexString(10)}.log";
                    Console.WriteLine("Creating log file: " + logFileName);
                    TryOpenStream(logFileName);
                    _logFileSize = 0;
                }
            }
        }
        public async Task <string> WriteAndGetViewName(string razorViewContent, string viewDirectory = null,
                                                       string viewName = null)
        {
            viewName      = viewName ?? "generated_" + DateTime.Now.Ticks + "_" + Utilis.GenerateRandomHexString(25);
            viewDirectory = viewDirectory ??
                            Path.Combine(EnvVarManager.GetOrThrow("TEMPORARY_VIEWS_PATH"), "Views/Shared");
            var viewPath =
                Path.Combine(viewDirectory, viewName + ".cshtml")
                .Replace("\\", "/");

            _generatedViewPath = viewPath;
            using (var fs = new FileStream(viewPath, FileMode.Create))
                using (var sw = new StreamWriter(fs))
                {
                    await sw.WriteAsync(razorViewContent);
                }

            return(viewName);
        }
        public async Task <FileEntity> Upload(IFormFile file)
        {
            var subDir = "upload/files";
            var uploadedFilesDirectory =
                Path.Combine(EnvVarManager.GetOrThrow("CONTENT_DIRECTORY"), subDir).Replace("\\", "/");

//            Console.WriteLine("Creating directory...");
            if (!Directory.Exists(uploadedFilesDirectory))
            {
                Logger.LogInfo("Creating files directory: " + uploadedFilesDirectory);
                Directory.CreateDirectory(uploadedFilesDirectory);
            }

            var fileEntity = new FileEntity
            {
                Name         = SanitizeFileName(file.FileName) + "_" + Utilis.GenerateRandomHexString(10),
                Extension    = Path.GetExtension(file.FileName).Substring(1).ToLower(),
                OriginalName = file.FileName,
                Size         = (int)file.Length,
                SubDirectory = subDir
            };


            var filePath = Path.Combine(uploadedFilesDirectory, $"{fileEntity.Name}.{fileEntity.Extension}")
                           .Replace("\\", "/");

//            Console.WriteLine("Saving file...");
            using (var fileStream = new FileStream(filePath, FileMode.Create))
            {
                await file.CopyToAsync(fileStream);
            }

            fileEntity.Path = filePath;

            await DataLayer.Repo <FileEntity>().Add(fileEntity);

            return(fileEntity);
        }