Browse Source

Se agrego el soporte para que pueda aceptar mas tipos de formatos en los archivos, asi como el tamaño maximo en los archivos

pull/1/head
parent
commit
3cf00a9480
3 changed files with 55 additions and 20 deletions
  1. +20
    -7
      src/main/java/mx/gob/jumapacelaya/api/RedmineClient.java
  2. +29
    -12
      src/main/java/mx/gob/jumapacelaya/views/crearnuevoticket/CrearnuevoTicketView.java
  3. +6
    -1
      src/main/resources/application.properties

+ 20
- 7
src/main/java/mx/gob/jumapacelaya/api/RedmineClient.java View File

@ -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<String> 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;
}


+ 29
- 12
src/main/java/mx/gob/jumapacelaya/views/crearnuevoticket/CrearnuevoTicketView.java View File

@ -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");
}
});


+ 6
- 1
src/main/resources/application.properties View File

@ -24,4 +24,9 @@ spring.ldap.password=Dr3na%134$4guA
########LOCAL######################################
redmine.url=http://localhost:3000/
redmine.api_key=66157c80f9efb6456757fa8f10887a2605d24fba
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

Loading…
Cancel
Save