diff --git a/booklore-api/src/main/java/com/adityachandel/booklore/service/book/BookDownloadService.java b/booklore-api/src/main/java/com/adityachandel/booklore/service/book/BookDownloadService.java index 3ba1ae69d..7293595d0 100644 --- a/booklore-api/src/main/java/com/adityachandel/booklore/service/book/BookDownloadService.java +++ b/booklore-api/src/main/java/com/adityachandel/booklore/service/book/BookDownloadService.java @@ -12,7 +12,7 @@ import com.adityachandel.booklore.util.FileUtils; import jakarta.servlet.http.HttpServletResponse; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.core.io.InputStreamResource; +import org.springframework.core.io.FileSystemResource; import org.springframework.core.io.Resource; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; @@ -56,8 +56,8 @@ public class BookDownloadService { throw ApiError.FAILED_TO_DOWNLOAD_FILE.createException(bookId); } - InputStream inputStream = new FileInputStream(bookFile); - InputStreamResource resource = new InputStreamResource(inputStream); + // Use FileSystemResource which properly handles file resources and closing + Resource resource = new FileSystemResource(bookFile); String encodedFilename = URLEncoder.encode(file.getFileName().toString(), StandardCharsets.UTF_8) .replace("+", "%20"); diff --git a/booklore-api/src/main/java/com/adityachandel/booklore/service/metadata/extractor/Fb2MetadataExtractor.java b/booklore-api/src/main/java/com/adityachandel/booklore/service/metadata/extractor/Fb2MetadataExtractor.java index 10a99bef8..d9b87faa3 100644 --- a/booklore-api/src/main/java/com/adityachandel/booklore/service/metadata/extractor/Fb2MetadataExtractor.java +++ b/booklore-api/src/main/java/com/adityachandel/booklore/service/metadata/extractor/Fb2MetadataExtractor.java @@ -354,14 +354,14 @@ public class Fb2MetadataExtractor implements FileMetadataExtractor { private InputStream getInputStream(File file) throws Exception { FileInputStream fis = new FileInputStream(file); - try { - if (file.getName().toLowerCase().endsWith(".gz")) { + if (file.getName().toLowerCase().endsWith(".gz")) { + try { return new GZIPInputStream(fis); + } catch (Exception e) { + fis.close(); + throw e; } - return fis; - } catch (Exception e) { - fis.close(); - throw e; } + return fis; } }