From 3cf00a9480b95de046645728677e9a05bb257401 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Antonio=20Ram=C3=ADrez=20Galv=C3=A1n?= Date: Thu, 18 Jul 2024 13:31:58 -0600 Subject: [PATCH] =?UTF-8?q?Se=20agrego=20el=20soporte=20para=20que=20pueda?= =?UTF-8?q?=20aceptar=20mas=20tipos=20de=20formatos=20en=20los=20archivos,?= =?UTF-8?q?=20asi=20como=20el=20tama=C3=B1o=20maximo=20en=20los=20archivos?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gob/jumapacelaya/api/RedmineClient.java | 27 ++++++++---- .../CrearnuevoTicketView.java | 41 +++++++++++++------ src/main/resources/application.properties | 7 +++- 3 files changed, 55 insertions(+), 20 deletions(-) diff --git a/src/main/java/mx/gob/jumapacelaya/api/RedmineClient.java b/src/main/java/mx/gob/jumapacelaya/api/RedmineClient.java index 74cec6d..64eb09a 100644 --- a/src/main/java/mx/gob/jumapacelaya/api/RedmineClient.java +++ b/src/main/java/mx/gob/jumapacelaya/api/RedmineClient.java @@ -10,9 +10,11 @@ import org.springframework.stereotype.Component; import java.io.IOException; import java.net.URI; +import java.net.URLEncoder; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; +import java.nio.charset.StandardCharsets; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; @@ -267,15 +269,26 @@ public class RedmineClient { public String uploadFile(byte[] fileContent, String fileName) { HttpClient client = HttpClient.newHttpClient(); - HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create(REDMINE_URL + "/uploads.json?filename=" + fileName)) - .header("Content-Type", "application/octet-stream") - .header("X-Redmine-API-Key", API_KEY) - .POST(HttpRequest.BodyPublishers.ofByteArray(fileContent)) - .build(); try { + // Codificar el nombre del archivo + String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8); + + // Construir la URI para la solicitud HTTP + URI uri = URI.create(REDMINE_URL + "/uploads.json?filename=" + encodedFileName); + + // Crear la solicitud HTTP + HttpRequest request = HttpRequest.newBuilder() + .uri(uri) + .header("Content-Type", "application/octet-stream") + .header("X-Redmine-API-Key", API_KEY) + .POST(HttpRequest.BodyPublishers.ofByteArray(fileContent)) + .build(); + + // Enviar la solicitud HTTP y recibir la respuesta HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString()); + + // Procesar la respuesta if (response.statusCode() == 201) { JsonObject jsonResponse = JsonParser.parseString(response.body()).getAsJsonObject(); return jsonResponse.get("upload").getAsJsonObject().get("token").getAsString(); @@ -284,7 +297,7 @@ public class RedmineClient { System.err.println("Response body: " + response.body()); return null; } - } catch (Exception e) { + } catch (IOException | InterruptedException e) { e.printStackTrace(); return null; } diff --git a/src/main/java/mx/gob/jumapacelaya/views/crearnuevoticket/CrearnuevoTicketView.java b/src/main/java/mx/gob/jumapacelaya/views/crearnuevoticket/CrearnuevoTicketView.java index 553c28d..9f3a95d 100644 --- a/src/main/java/mx/gob/jumapacelaya/views/crearnuevoticket/CrearnuevoTicketView.java +++ b/src/main/java/mx/gob/jumapacelaya/views/crearnuevoticket/CrearnuevoTicketView.java @@ -22,7 +22,9 @@ import mx.gob.jumapacelaya.models.RedmineUser; import mx.gob.jumapacelaya.services.UserService; import mx.gob.jumapacelaya.views.MainLayout; +import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.io.InputStream; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -66,24 +68,39 @@ public class CrearnuevoTicketView extends VerticalLayout { descripcion.setHeight("250px"); // Campo para adjuntar archivos - buffer = new MemoryBuffer(); - uploadFile = new Upload(buffer); - uploadFile.setAcceptedFileTypes("image/jpeg", "image/png", "application/pdf"); + MemoryBuffer buffer = new MemoryBuffer(); + Upload uploadFile = new Upload(buffer); + uploadFile.setAcceptedFileTypes("image/jpeg", "image/png", "application/pdf", "image/gif", "image/svg", "text/plain", + "application/zip", "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "application/vnd.ms-excel", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); uploadFile.addSucceededListener(event -> { - if (buffer.getFileData() != null) { - try { - byte[] fileContent = buffer.getInputStream().readAllBytes(); - String fileName = buffer.getFileName(); - fileUploadToken = api.uploadFile(fileContent, fileName); - if (fileUploadToken == null) { - logger.error("Error al obtener el token del archivo"); - } else { - logger.error("Archivo subido exitosamente. Token obtenido: " + fileUploadToken); + String fileName = buffer.getFileName(); + InputStream inputStream = buffer.getInputStream(); + + if (fileName != null && inputStream != null) { + try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { + // Lee los bytes del archivo + byte[] bufferArray = new byte[1024]; + int bytesRead; + while ((bytesRead = inputStream.read(bufferArray)) != -1) { + outputStream.write(bufferArray, 0, bytesRead); } + byte[] fileContent = outputStream.toByteArray(); + } catch (IOException e) { + Notification.show("Error al leer el archivo: " + e.getMessage(), 3000, Notification.Position.MIDDLE); logger.error("Error al leer el archivo: " + e.getMessage()); + } finally { + try { + inputStream.close(); + } catch (IOException e) { + logger.error("Error al cerrar el InputStream: " + e.getMessage()); + } } + } else { + Notification.show("Error: Nombre de archivo o contenido nulos", 3000, Notification.Position.MIDDLE); + logger.error("Error: Nombre de archivo o contenido nulos"); } }); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 821fb71..529eb5b 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -24,4 +24,9 @@ spring.ldap.password=Dr3na%134$4guA ########LOCAL###################################### redmine.url=http://localhost:3000/ -redmine.api_key=66157c80f9efb6456757fa8f10887a2605d24fba \ No newline at end of file +redmine.api_key=66157c80f9efb6456757fa8f10887a2605d24fba + + +###CONFIGURACION DEL TAMAŅO MAXIMO PERMITIDO PARA ARCHIVOS### +spring.servlet.multipart.max-file-size=10MB +spring.servlet.multipart.max-request-size=10MB \ No newline at end of file