web-dev-qa-db-fra.com

Renvoyer un fichier en utilisant Java Jersey

J'utilise Java Jersey pour implémenter un service REST . Ce que mon service devrait fournir est une option de téléchargement de fichier . Ces fichiers sont assez volumineux et sont construits à partir de données de la base de données.

Actuellement, je récupère toutes les données de la base de données, je les enregistre dans un fichier .__ et je retourne un 

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

Existe-t-il un moyen de commencer à servir le fichier sans télécharger complètement les données de la base de données, mais comme les données proviennent de la base de données, ajoutez-le au flux de sortie?

21
digy

Résolu le problème en utilisant la réponse de Flux binaires d'entrée et de sortie avec JERSEY?

8
digy

Que diriez-vous 

File fileToSend = getFile();
return Response.ok(fileToSend, "application/Zip").build();

Le type de support peut être défini pour correspondre au fichier envoyé.

Cela semble assez simple, mais plus important encore, les experts Java qui lisent ceci voient-ils un problème de performances avec la solution?

7
nishantkyal

dépend du type de connexion/pilote de base de données sous-jacent. Si vous avez accès à la couche JDBC (par exemple, avec Hibernate), il devrait être possible de diffuser des données à l'aide de l'API JDBC Streaming, puis de récupérer les flux du ResultSet et de les transmettre à la réponse de Jersey. Constructeur… .. Je ne l'ai pas fait moi-même….

vérifier ici:

0
fasseg

Donc, vous voulez obtenir un flux de votre base de données?

Je ne suis pas sûr que ce soit même possible.

Mais vous n'avez pas besoin d'écrire un fichier temporaire pour envoyer vos données. Au lieu d'écrire dans le fichier, vous pouvez utiliser un ByteArrayInputStream et y placer vos données avec un tableau d'octets.

0
Colin Hebert