@page "/docedit" @page "/docedit/{docID:int}" @using HyperCube.Models; @inject NavigationManager NavigationManager; @inject IJSRuntime JsRuntime; @attribute [Authorize] @*@attribute [Authorize(Roles = "admin")]*@

@header


@if (docID < 1) {

//accept="application/pdf, application/msword, application/vnd.openxmlformats-officedocument.wordprocessingml.document" } else { //

Исходный документ: @articleModel.Filename

Исходный документ: @articleModel.Filename

}

@if (docID < 1) {

} else {

}

Статус: @status

@code { [Parameter] public int docID { get; set; } const string FOLDER_NAME = "articles_storage"; const long MAX_FILE_SIZE = 5120000; //bytes ArticleModel articleModel = new ArticleModel(); string status; string header; string storageFolderPath; MemoryStream memoryStream; protected override async Task OnInitializedAsync() { string path = AppDomain.CurrentDomain.BaseDirectory; storageFolderPath = (Path.Combine(path, FOLDER_NAME)); if (docID > 0) { header = "Проверка материала"; MySQLConnector dbCon = MySQLConnector.Instance(); string stringSQL = $"SELECT id, filename, article_name, authors, date_publish, annotation, keywords FROM articles WHERE id={docID}"; articleModel = await dbCon.SQLSelectArticle(stringSQL); status = $"Article ID={docID} loaded."; } else header = "Загрузка материала"; } private async void HandleValidSubmit() { MySQLConnector dbCon = MySQLConnector.Instance(); string stringSQL = $"INSERT INTO articles (filename, article_name, authors, date_publish, annotation, keywords)" + $"VALUES ('{articleModel.Filename}', '{articleModel.Name}', '{articleModel.Authors}', '{articleModel.PublishDate.ToString("yyyy-MM-dd")}'," + $"'{articleModel.Annotation}', '{articleModel.Keywords}')"; long id = dbCon.SQLInsert(stringSQL); stringSQL = $"INSERT INTO actions_history (article_id, action_type, acc_id)" + $"VALUES ('{id}', {1}, {1})"; dbCon.SQLInsert(stringSQL); dbCon.Close(); //Console.WriteLine($"memorystream: {memoryStream.Length}, filename: {articleModel.Filename}"); string fullpath = Path.Combine(storageFolderPath, $"{id}_{articleModel.Filename}"); Directory.CreateDirectory(storageFolderPath); FileStream fs = new(fullpath, FileMode.Create, FileAccess.Write); memoryStream.Position = 0; await memoryStream.CopyToAsync(fs); Console.WriteLine($"User has saved new article data, {id}_{articleModel.Filename}, memory size:{memoryStream.Length}b, file size: {fs.Length}b"); memoryStream.Close(); fs.Close(); status = "New article data saved."; bool confirmed = await JsRuntime.InvokeAsync("confirm", "Хотите загрузить еще статью?"); if (confirmed) NavigationManager.NavigateTo("docedit", true); else NavigationManager.NavigateTo(""); } private async Task HandleSelection(InputFileChangeEventArgs e) { IBrowserFile file = e.File; if (file != null) { Stream stream = file.OpenReadStream(MAX_FILE_SIZE); memoryStream = new(); await stream.CopyToAsync(memoryStream); status = $"Finished loading {memoryStream.Length} bytes from {file.Name}"; DocParse docParse = new DocParse(); articleModel = DocParse.ReadPDF(memoryStream); articleModel.Filename = file.Name; } } private async void Cancel() { bool confirmed = await JsRuntime.InvokeAsync("confirm", "Вы уверены, что хотите отклонить статью?"); if (confirmed) { ///какая-то логика отмены... NavigationManager.NavigateTo(""); } } //private async void DownloadDoc() //{ // string fullpath = Path.Combine(storageFolderPath, $"{docID}_{articleModel.Filename}"); // if (File.Exists(fullpath)) // { // //await JsRuntime.InvokeAsync("downloadFile", fullpath); // } // else // { // Console.WriteLine($"File {fullpath} not found."); // status = $"File {fullpath} not found."; // } //} }