Ejemplo n.º 1
0
        public async Task <IActionResult> GetDocuments([FromRoute] int id)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var documents = repository.GetDocuments(id);

            if (documents == null)
            {
                return(NotFound());
            }

            // Название папки для хранения временных файлов
            string tempDirectory = LConfig.temp_dir;

            // Создание папки, если не существует
            if (!SIO.Directory.Exists(tempDirectory))
            {
                SIO.Directory.CreateDirectory(tempDirectory);
                HLogger.log.Info("Создание каталога:" + tempDirectory);
            }

            // Определение названия временного файла
            string tempFileHash = Hashing.GetMD5FileHash(documents.fileObject);
            string tempFileName = "temp_" + tempFileHash;

            // Определение относительного пути временного файла
            string tempFilePath = tempDirectory + "/" + tempFileName + ".temp";

            HLogger.log.Info("Генерация имени временного файла:" + tempFilePath);

            // Получение условного типа файла
            string fileType = HFile.getFileType(documents.fileExp);

            HLogger.log.Debug("Тип файла:" + fileType);

            // Создание временного потока в памяти для хранения конвертированного файла
            SIO.MemoryStream resultAnswer = null;

            // Если тип файла невалидный, тогда отказ
            if (fileType == null)
            {
                HLogger.log.Warn("Невалидный тип файла");
                return(NoContent());
            }
            else
            // Иначе конвертируем в PDF
            {
                // Если файл относится к типу Word
                if (fileType == "doc")
                {
                    resultAnswer = HFile.getConvertFileDoc(documents.fileObject, tempFilePath);
                }
            }

            // Если поток не пустой, тогда отправляем файл пользователю
            if (resultAnswer != null)
            {
                return(File(resultAnswer, documents.fileType, documents.fileName + ".pdf"));
            }
            else
            {
                HLogger.log.Error("Потока с результатом вывода не существует");
                return(NoContent());
            }
        }