diff --git a/src/main/java/ru/soune/nocopy/exception/ChunkSizeExceededException.java b/src/main/java/ru/soune/nocopy/exception/ChunkSizeExceededException.java index a19cd95..f8a4933 100644 --- a/src/main/java/ru/soune/nocopy/exception/ChunkSizeExceededException.java +++ b/src/main/java/ru/soune/nocopy/exception/ChunkSizeExceededException.java @@ -2,6 +2,6 @@ package ru.soune.nocopy.exception; public class ChunkSizeExceededException extends RuntimeException { public ChunkSizeExceededException(long actualSize, long maxSize) { - super(String.format("Chunk size exceeded: %d > %d", actualSize, maxSize)); + super(String.format("Chunk size not valid: " + actualSize)); } } diff --git a/src/main/java/ru/soune/nocopy/service/file/FileEntityService.java b/src/main/java/ru/soune/nocopy/service/file/FileEntityService.java index 8b239a5..97a6cab 100644 --- a/src/main/java/ru/soune/nocopy/service/file/FileEntityService.java +++ b/src/main/java/ru/soune/nocopy/service/file/FileEntityService.java @@ -40,7 +40,6 @@ public class FileEntityService { long fileSize = Files.size(filePath); String originalName = session.getFileName(); - String extension = extractFileExtension(originalName); String storedName = filePath.getFileName().toString(); FileEntity fileEntity = FileEntity.builder() @@ -50,7 +49,7 @@ public class FileEntityService { .filePath(session.getFilePath()) .fileSize(fileSize) .mimeType(session.getFileType()) - .fileExtension(extension) + .fileExtension(session.getExtension()) .checksum(checksum) .uploadSessionId(session.getUploadId()) .status(FileStatus.ACTIVE) diff --git a/src/main/java/ru/soune/nocopy/service/file/FileUploadServiceImpl.java b/src/main/java/ru/soune/nocopy/service/file/FileUploadServiceImpl.java index eb48651..93c7d67 100644 --- a/src/main/java/ru/soune/nocopy/service/file/FileUploadServiceImpl.java +++ b/src/main/java/ru/soune/nocopy/service/file/FileUploadServiceImpl.java @@ -102,13 +102,14 @@ public class FileUploadServiceImpl implements FileUploadService { int totalChunks = (int) Math.ceil((double) fileSize / chunkSize); log.debug("File will be split into {} chunks (chunk size: {} bytes)", totalChunks, chunkSize); + Long chunkSize = totalChunks == 1 ? fileSize : 5242880L; FileUploadSession session = FileUploadSession.builder() .userId(userId) .extension(extension) .fileName(fileName) .fileType(fileType) - .chunkSize(5242880L) + .chunkSize(chunkSize) .fileSize(fileSize) .totalChunks(totalChunks) .chunksUploaded(0) @@ -148,7 +149,12 @@ public class FileUploadServiceImpl implements FileUploadService { chunkNumber, session.getTotalChunks() - 1)); } - if (chunkFile.getSize() > chunkSize) { + if (chunkNumber == 0 && chunkFile.getSize() > chunkSize || chunkNumber + 1 == (session.getTotalChunks()) + && chunkFile.getSize() > chunkSize) { + throw new ChunkSizeExceededException(chunkFile.getSize(), chunkSize); + } + + if (chunkNumber > 0 && chunkNumber + 1 < session.getTotalChunks() && chunkFile.getSize() != chunkSize) { throw new ChunkSizeExceededException(chunkFile.getSize(), chunkSize); } @@ -333,36 +339,6 @@ public class FileUploadServiceImpl implements FileUploadService { } } -// private void assembleFile(FileUploadSession session) throws IOException { -// log.info("Starting file assembly for session: {} ({})", -// session.getUploadId(), session.getFileName()); -// -// Path finalFilePath = null; -// -// try { -// finalFilePath = prepareFinalFile(session); -// -// validateAllChunksExist(session); -// -// mergeChunksToFile(session, finalFilePath); -// -// validateFinalFile(session, finalFilePath); -// -// updateSessionOnSuccess(session, finalFilePath); -// -// cleanupSessionFiles(session); -// -// log.info("File assembly completed: {} -> {} ({} bytes)", -// session.getFileName(), finalFilePath, session.getFileSize()); -// -// } catch (Exception e) { -// if (finalFilePath != null) { -// Files.deleteIfExists(finalFilePath); -// } -// throw e; -// } -// } - private void assembleFile(FileUploadSession session) throws IOException { log.info("Starting file assembly for session: {} ({})", session.getUploadId(), session.getFileName());