From d1e1012a187a0f78661e77975e31be0a5838063d Mon Sep 17 00:00:00 2001 From: dre0059 <eliska.dreveniakova@vsb.cz> Date: Tue, 29 Apr 2025 09:28:39 +0200 Subject: [PATCH] Update --- data/demo.mv.db | Bin 21037056 -> 21037056 bytes .../controller/FileUploadController.java | 34 +++++++++-------- .../articleprocessor/model/Dokument.java | 2 +- src/main/resources/templates/upload.html | 36 +++++++++++++----- 4 files changed, 45 insertions(+), 27 deletions(-) diff --git a/data/demo.mv.db b/data/demo.mv.db index ffd29e5632ef9a131d2e65647c27ed4f451be013..c687424bbc764ff63cdef9e93a82885258976e41 100644 GIT binary patch delta 14830 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 JGL9(C<Znv;FTnr+ delta 4300 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 diff --git a/src/main/java/com/dre0059/articleprocessor/controller/FileUploadController.java b/src/main/java/com/dre0059/articleprocessor/controller/FileUploadController.java index 8d463d7..9bc0176 100644 --- a/src/main/java/com/dre0059/articleprocessor/controller/FileUploadController.java +++ b/src/main/java/com/dre0059/articleprocessor/controller/FileUploadController.java @@ -22,6 +22,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MaxUploadSizeExceededException; +import org.springframework.web.bind.annotation.ExceptionHandler; @Controller @RequestMapping @@ -31,7 +33,6 @@ public class FileUploadController { private final ReferenceService referenceService; private final CategoryService categoryService; - public FileUploadController(GrobidClient grobidClient, HeaderService headerService, ReferenceService referenceService, CategoryService categoryService) { this.grobidClient = grobidClient; this.headerService = headerService; @@ -54,7 +55,13 @@ public class FileUploadController { @RequestParam("tags") List<String> tags) { if (file.isEmpty()) { - return ResponseEntity.badRequest().body("No file uploaded!"); + return ResponseEntity.badRequest().body(Map.of("error", "No file uploaded!")); + } + + // Pridáme kontrolu veľkosti eÅ¡te pred spracovanÃm + final long maxFileSizeBytes = 5 * 1024 * 1024; // 5 MB + if (file.getSize() > maxFileSizeBytes) { + return ResponseEntity.badRequest().body(Map.of("error", "Uploaded PDF is too large. Maximum allowed size is 5MB.")); } try { @@ -64,10 +71,9 @@ public class FileUploadController { // save data from file to tmpFile try(FileOutputStream stream = new FileOutputStream(tmpFile)) { stream.write(file.getBytes()); - } catch (IOException e) { - return ResponseEntity.internalServerError().body("FAILURE - cannot process file : " + e.getMessage()); + } catch (IOException e) { + return ResponseEntity.internalServerError().body(Map.of("error", "FAILURE - cannot process file : " + e.getMessage())); } - //System.out.println("File written to temporary location. "); String header; try { @@ -79,15 +85,11 @@ public class FileUploadController { } return ResponseEntity.internalServerError().body(Map.of("error", "GROBID processing error")); } - //System.out.println("GROBID Header processed: " + header); String references = grobidClient.processReferences(tmpFile); - //System.out.println("GROBID Reference processed: " + references); Dokument savedDocument = headerService.processHeader(header, categoryId, tags, tmpFile); - //System.out.println("Header saved to database."); - // dokument already exists if(savedDocument == null) { if (tmpFile.exists()) tmpFile.delete(); return ResponseEntity.status(HttpStatus.CONFLICT) @@ -95,7 +97,6 @@ public class FileUploadController { } referenceService.extractReferences(references); - //System.out.println("References extracted.."); if (tmpFile.exists()) tmpFile.delete(); @@ -105,14 +106,15 @@ public class FileUploadController { return ResponseEntity.ok(response); - } catch (IOException e) { - return ResponseEntity.status(500).body("Chyba pri vytváranà doÄasného súboru."); + return ResponseEntity.status(500).body(Map.of("error", "Chyba pri vytváranà doÄasného súboru.")); } } - + // Globálny handler pre veľké súbory + @ExceptionHandler(MaxUploadSizeExceededException.class) + @ResponseBody + public ResponseEntity<?> handleMaxSizeException(MaxUploadSizeExceededException exc) { + return ResponseEntity.badRequest().body(Map.of("error", "Uploaded PDF is too large. Maximum allowed size is 5MB.")); + } } - - - diff --git a/src/main/java/com/dre0059/articleprocessor/model/Dokument.java b/src/main/java/com/dre0059/articleprocessor/model/Dokument.java index 8ae0382..d7ab3ff 100644 --- a/src/main/java/com/dre0059/articleprocessor/model/Dokument.java +++ b/src/main/java/com/dre0059/articleprocessor/model/Dokument.java @@ -110,7 +110,7 @@ public class Dokument { StringBuilder builder = new StringBuilder(); for(Tag tag : tags){ - builder.append(tag.getTitle() + " "); + builder.append(tag.getTitle() + ", "); } return builder.toString(); diff --git a/src/main/resources/templates/upload.html b/src/main/resources/templates/upload.html index c263d6d..7b640cb 100644 --- a/src/main/resources/templates/upload.html +++ b/src/main/resources/templates/upload.html @@ -121,19 +121,35 @@ // Náhľad PDF súboru document.getElementById('fileInput').addEventListener('change', function(event) { const file = event.target.files[0]; - if (file && file.type === 'application/pdf') { - const fileURL = URL.createObjectURL(file); - const preview = document.getElementById('pdf-preview'); - preview.src = fileURL; - preview.style.display = 'block'; - - document.getElementById('upload-button-wrapper').style.display = 'block'; - preview.scrollIntoView({ behavior: 'smooth', block: 'start' }); - } else { - alert('Please, choose a valid PDF file.'); + if (file) { + // kontrola veľkosti + const maxSizeMB = 5; + const maxSizeBytes = maxSizeMB * 1024 * 1024; + + if (file.size > maxSizeBytes) { + showAlert(`Uploaded PDF is too large. Maximum allowed size is ${maxSizeMB}MB.`, 'danger'); + this.value = ''; // vyprázdni input + document.getElementById('pdf-preview').style.display = 'none'; + document.getElementById('upload-button-wrapper').style.display = 'none'; + return; + } + + if (file.type === 'application/pdf') { + const fileURL = URL.createObjectURL(file); + const preview = document.getElementById('pdf-preview'); + preview.src = fileURL; + preview.style.display = 'block'; + + document.getElementById('upload-button-wrapper').style.display = 'block'; + preview.scrollIntoView({ behavior: 'smooth', block: 'start' }); + } else { + alert('Please, choose a valid PDF file.'); + } } }); + + // Inicializácia SELECT2 pre tagy $(document).ready(function() { $('#tags').select2({ -- GitLab