2010-10-10 17 views
20

Estoy usando 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.Devolver un archivo usando Java Jersey

Actualmente me retracto todos los datos de la base de datos y guardar en un archivo y devolviendo una

Response.ok().entity(new FileInputStream(file)).build(); 

¿Hay una manera de cómo puedo empezar a servir el archivo sin necesidad de descargar completamente los datos de la db, pero como los datos provienen de db anexarlo a la secuencia de salida?

+0

Consulte http://stackoverflow.com/questions/3496209/input-and-output-binary-streams-using-jersey, esta es una respuesta que también es útil para esto. – centic

Respuesta

0

¿Deseas obtener un extracto 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 poner sus datos allí con una matriz de bytes.

+0

Sí, quiero algo como nuevo InputStream (nuevo MyDBWrapper()) donde MyDBWrapper realiza la búsqueda de datos y el formateo. No estoy seguro de poder usar ByteInputStream ya que los datos son bastante grandes: pueden obtener más de 1 GB. – digy

0

depende del tipo de conexión/controlador de base de datos subyacente, si tiene acceso a la capa JDBC (por ejemplo, usando Hibernate) debería ser posible transmitir datos utilizando la API de transmisión JDBC, tomar los flujos del ResultSet y pasar ellos en Jersey's Response Builder. No he hecho esto por mí mismo, aunque ..

cheque aquí:

7

¿Qué hay de

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 envía.

Esto se ve 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?

+0

¿De hecho has intentado esto? Esperaría que esto simplemente devuelva el nombre de archivo como una cadena, no el contenido del archivo ... – centic

+0

Sí, esto funcionó para mí. – nishantkyal

+0

No fue para mí, de hecho devolvió el nombre de archivo. –

Cuestiones relacionadas