From b523f946889709c9078c2f2755a5a6de76a4b21d Mon Sep 17 00:00:00 2001 From: manu-pc Date: Sat, 5 Sep 2026 18:25:14 +0200 Subject: [PATCH] fix: extension de arquivo non persiste ao subir --- .../example/gradox2/persistence/entities/File.java | 4 ++++ .../gradox2/persistence/entities/TempFile.java | 4 ++++ .../implementation/FileProposalServiceImpl.java | 11 +++++++++-- .../service/implementation/FileServiceImpl.java | 5 ++++- .../service/implementation/VoteServiceImpl.java | 1 + .../db/migration/V9__file_original_filename.sql | 6 ++++++ 6 files changed, 28 insertions(+), 3 deletions(-) create mode 100644 gradox2/src/main/resources/db/migration/V9__file_original_filename.sql diff --git a/gradox2/src/main/java/com/example/gradox2/persistence/entities/File.java b/gradox2/src/main/java/com/example/gradox2/persistence/entities/File.java index e9b3e8e..c592f8a 100644 --- a/gradox2/src/main/java/com/example/gradox2/persistence/entities/File.java +++ b/gradox2/src/main/java/com/example/gradox2/persistence/entities/File.java @@ -31,6 +31,10 @@ public class File { @Column(name = "object_key", nullable = false) private String objectKey; + + @Column(name = "original_filename") + private String originalFilename; + private String fileHash; @Column(name = "size_bytes") diff --git a/gradox2/src/main/java/com/example/gradox2/persistence/entities/TempFile.java b/gradox2/src/main/java/com/example/gradox2/persistence/entities/TempFile.java index cbbf024..126afc2 100644 --- a/gradox2/src/main/java/com/example/gradox2/persistence/entities/TempFile.java +++ b/gradox2/src/main/java/com/example/gradox2/persistence/entities/TempFile.java @@ -28,6 +28,10 @@ public class TempFile { @Column(name = "object_key", nullable = false) private String objectKey; + + @Column(name = "original_filename") + private String originalFilename; + private String fileHash; @Column(name = "size_bytes") diff --git a/gradox2/src/main/java/com/example/gradox2/service/implementation/FileProposalServiceImpl.java b/gradox2/src/main/java/com/example/gradox2/service/implementation/FileProposalServiceImpl.java index 1a11050..5ed8e51 100644 --- a/gradox2/src/main/java/com/example/gradox2/service/implementation/FileProposalServiceImpl.java +++ b/gradox2/src/main/java/com/example/gradox2/service/implementation/FileProposalServiceImpl.java @@ -86,12 +86,16 @@ public FileProposalResponse uploadFileProposal(UploadFileProposalRequest dto) { try { byte[] fileData = dto.getFile().getBytes(); - String objectKey = s3StorageService.put(fileData); + String contentType = dto.getFile().getContentType(); + String objectKey = contentType != null + ? s3StorageService.put(fileData, contentType) + : s3StorageService.put(fileData); TempFile tempFile = TempFile.builder() .title(dto.getTitle()) .description(dto.getDescription()) .type(dto.getType()) .objectKey(objectKey) + .originalFilename(dto.getFile().getOriginalFilename()) .fileHash(generateFileHash(fileData)) // Hash seguro .sizeBytes((long) fileData.length) .subject(subject) @@ -180,8 +184,11 @@ public TempFile downloadFileFromProposal(Long id) { public FileDownloadResponse getFileDownloadLink(Long id) { TempFile tempFile = downloadFileFromProposal(id); + String filename = tempFile.getOriginalFilename() != null + ? tempFile.getOriginalFilename() + : tempFile.getTitle(); String url = fileUrlSigner.presignedGetUrl(tempFile.getObjectKey(), - ContentDisposition.attachmentOf(tempFile.getTitle())); + ContentDisposition.attachmentOf(filename)); return FileDownloadResponse.builder().url(url).build(); } diff --git a/gradox2/src/main/java/com/example/gradox2/service/implementation/FileServiceImpl.java b/gradox2/src/main/java/com/example/gradox2/service/implementation/FileServiceImpl.java index 0160523..7b6826a 100644 --- a/gradox2/src/main/java/com/example/gradox2/service/implementation/FileServiceImpl.java +++ b/gradox2/src/main/java/com/example/gradox2/service/implementation/FileServiceImpl.java @@ -76,8 +76,11 @@ public FileDownloadResponse downloadFile(Long id) { file.incrementDownloadCount(); fileRepository.save(file); + String filename = file.getOriginalFilename() != null + ? file.getOriginalFilename() + : file.getTitle(); String url = fileUrlSigner.presignedGetUrl(file.getObjectKey(), - ContentDisposition.attachmentOf(file.getTitle())); + ContentDisposition.attachmentOf(filename)); return FileDownloadResponse.builder().url(url).build(); } diff --git a/gradox2/src/main/java/com/example/gradox2/service/implementation/VoteServiceImpl.java b/gradox2/src/main/java/com/example/gradox2/service/implementation/VoteServiceImpl.java index 4a8446f..6a754f3 100644 --- a/gradox2/src/main/java/com/example/gradox2/service/implementation/VoteServiceImpl.java +++ b/gradox2/src/main/java/com/example/gradox2/service/implementation/VoteServiceImpl.java @@ -329,6 +329,7 @@ private void applyFileProposal(FileProposal fileProposal) { .description(tempFile.getDescription()) .type(tempFile.getType()) .objectKey(tempFile.getObjectKey()) + .originalFilename(tempFile.getOriginalFilename()) .fileHash(tempFile.getFileHash()) .sizeBytes(tempFile.getSizeBytes()) .uploader(tempFile.getUploader()) diff --git a/gradox2/src/main/resources/db/migration/V9__file_original_filename.sql b/gradox2/src/main/resources/db/migration/V9__file_original_filename.sql new file mode 100644 index 0000000..400c8ca --- /dev/null +++ b/gradox2/src/main/resources/db/migration/V9__file_original_filename.sql @@ -0,0 +1,6 @@ +-- V9: Persistir o nome de arquivo orixinal (con extensión) para descargas +alter table if exists files + add column if not exists original_filename varchar(255); + +alter table if exists temp_files + add column if not exists original_filename varchar(255);