servicio - Devolver un archivo usando Java Jersey
rest jee (4)
¿Así que quieres obtener un flujo de tu base de datos?
No estoy seguro de que sea posible.
Pero no tiene que escribir un archivo temporal para enviar sus datos. En lugar de escribir en el archivo, puede usar un ByteArrayInputStream y colocar sus datos allí con una matriz de bytes.
Estoy usando el Java Jersey para implementar un servicio REST. Una cosa que mi servicio debería proporcionar es una opción de descarga de archivos. Estos archivos son bastante grandes y están construidos a partir de datos de db.
Actualmente, estoy recuperando todos los datos de la base de datos, los guardo en un archivo y devuelvo un archivo.
Response.ok().entity(new FileInputStream(file)).build();
¿Hay alguna manera en que pueda comenzar a servir el archivo sin descargar completamente los datos de db, pero a medida que los datos provienen de db, se agregan a la secuencia de salida?
¿Resolvió el problema usando la respuesta de flujos binarios de entrada y salida usando JERSEY?
Qué tal si
File fileToSend = getFile();
return Response.ok(fileToSend, "application/zip").build();
El tipo de medio se puede configurar para que coincida con el archivo que se está enviando.
Esto parece bastante sencillo pero, lo que es más importante, ¿los expertos de Java que leen esto ven un problema de rendimiento con la solución?
depende del tipo de conexión / controlador de base de datos subyacente, si tiene acceso a la capa JDBC (por ejemplo, utilizando Hibernate), debería ser posible transmitir datos utilizando la API de transmisión de JDBC, luego tomar los flujos del ResultSet y pasarlos a la Respuesta de Jersey Constructor. Aunque no lo he hecho yo mismo ..
Chequea aquí: