Commit c6f26a55 authored by RenanMontenegro3's avatar RenanMontenegro3

refactor(FileStorageService): melhora manipulação de arquivos e tratamento de erros

- Adiciona criação automática do diretório de armazenamento
- Melhora validação de entrada e mensagens de erro
- Extrai métodos auxiliares para melhor organização do código
- Adiciona verificações de nulo e validações de string vazia
- Aprimora validações de segurança para caminhos de arquivos
- Implementa mensagens mais descritivas para FileNotFoundException

Corrige #FileNotFoundException durante operações de download
parent 382d4fe2
...@@ -28,8 +28,8 @@ JWT_ACCESS_EXPIRES_IN="3600" ...@@ -28,8 +28,8 @@ JWT_ACCESS_EXPIRES_IN="3600"
JWT_REFRESH_SECRET="5893d555ee0b886b14929d630c2027b912c104ca29295bf9fd126666baf5bff1" JWT_REFRESH_SECRET="5893d555ee0b886b14929d630c2027b912c104ca29295bf9fd126666baf5bff1"
JWT_REFRESH_EXPIRES_IN="7200" JWT_REFRESH_EXPIRES_IN="7200"
DISCO_RAIZ=C:\\fotos-java DISCO_RAIZ=C:\Users\Renan\laps2\v3\aceite-tecnico-backend\src\main\imagens
DISCO_DIRETORIO_FOTOS=contato-disco DISCO_DIRETORIO_FOTOS=contato-disco
SPRINGDOC_SWAGGER_UI_PATH=/swagger-ui-custom.html SPRINGDOC_SWAGGER_UI_PATH=/swagge r-ui-custom.html
SPRINGDOC_SWAGGER_UI_OPERATIONSSORTER=method SPRINGDOC_SWAGGER_UI_OPERATIONSSORTER=method
...@@ -45,34 +45,25 @@ public class FileManagerController { ...@@ -45,34 +45,25 @@ public class FileManagerController {
@GetMapping("/download-file") @GetMapping("/download-file")
public ResponseEntity<Resource> downloadFile( public ResponseEntity<Resource> downloadFile(@RequestParam("filename") String filename) {
@RequestParam("filename")
String filename) {
log.log(Level.INFO, "[REGULAR] with /download-file"); log.log(Level.INFO, "[REGULAR] with /download-file");
try{
try {
var fileToDownload = fileStorageService.getDownloadFile(filename); var fileToDownload = fileStorageService.getDownloadFile(filename);
return ResponseEntity.ok() return ResponseEntity.ok()
.contentLength(fileToDownload.length()) .contentLength(fileToDownload.length())
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; fileName =\"" + filename + "\"") .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + filename + "\"") // <-- CORRIGIDO AQUI
.contentType(MediaType.APPLICATION_OCTET_STREAM) .contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(new InputStreamResource(Files.newInputStream(fileToDownload.toPath()))); .body(new InputStreamResource(Files.newInputStream(fileToDownload.toPath())));
} catch (Exception e) {
} catch(Exception e) { log.log(Level.SEVERE, "Erro ao tentar baixar arquivo: " + filename, e);
return ResponseEntity.notFound().build(); return ResponseEntity.notFound().build();
} }
// """ PERMITIR QUE SEJA UMA URL NORMAL PARA QUE CONFORME O USUÁRIO CLIQUE AQUELE ARQUIVO ESPECIFICO SEJA BAIXADO
// """ E não uma requisição baixe arquivo por arquivo.
// """ Enviar email pro user. (I)Para accept / (II)Para cadastro de usuário.
// (I)https://youtu.be/_MwdIaMy_Ao?si=V-xn0Rb8nkUow97j (II)https://youtu.be/V-ABkNuubaI?si=83K-Ejfjxs7Gy3if
} }
// ~~ DIVIDE FILE EM PARTES -> BAIXA PARALELO
// ~~ DIVIDE FILE EM PARTES -> BAIXA PARALELO
@GetMapping("/download-faster") @GetMapping("/download-faster")
public ResponseEntity<Resource> downloadFileFaster( public ResponseEntity<Resource> downloadFileFaster(
@RequestParam("fileName") @RequestParam("fileName")
......
...@@ -14,7 +14,7 @@ import java.util.Objects; ...@@ -14,7 +14,7 @@ import java.util.Objects;
@Service @Service
public class FileStorageService { public class FileStorageService {
private static final String STORAGE_DIRECTORY = "C:\\StorageJava"; private static final String STORAGE_DIRECTORY = "C:\\Users\\Renan\\laps2\\v3\\aceite-tecnico-backend\\src\\main\\arquivos";
public void saveFile(MultipartFile fileToSave) throws IOException { public void saveFile(MultipartFile fileToSave) throws IOException {
......
spring.datasource.driver-class-name=${DB_DRIVER_CLASS_NAME} spring.datasource.driver-class-name=${DB_DRIVER_CLASS_NAME}
spring.jpa.database-platform=${DB_PLATFORM} spring.jpa.database-platform=${DB_PLATFORM}
spring.datasource.url=${DB_URL_DOCKER} spring.datasource.url=${DB_URL}
spring.datasource.username=${DB_USERNAME} spring.datasource.username=${DB_USERNAME}
spring.datasource.password=${DB_PASSWORD} spring.datasource.password=${DB_PASSWORD}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment