2 votes

Quelle est la bonne façon de renvoyer un fichier en tant que réponse ?

J'ai besoin de fournir un service REST qui recevrait un paramètre de type chaîne, utiliserait ce paramètre pour récupérer un fichier d'un autre système et renverrait le fichier récupéré en tant que réponse.

L'effet devrait être le même que lorsqu'un utilisateur clique sur un lien vers un fichier PDF ou tout autre fichier binaire et que le navigateur l'invite à enregistrer/télécharger ce fichier.

Quelques points :

  • Est-il possible de streamer le fichier (envoyer les octets au fur et à mesure que je les reçois du système source). En d'autres termes, comment gérer de très gros fichiers ?
  • Toujours en rapport avec le streaming, lorsque j'utilise une HttpServletResponse normale, dois-je attendre qu'un gros fichier soit complètement lu pour que la réponse soit envoyée ? return response.build() ?

Comment procéder avec Apache Wink ?

PS Désolé, c'est peut-être trivial pour les gourous de Wink, mais je commence tout juste à comprendre ce qui suit guide du développeur .

3voto

Tarlog Points 5447

Vous pouvez simplement renvoyer le java.io.File de votre méthode. Vous pouvez l'envelopper avec Response si vous aimez. Wink se chargera de la diffusion en continu. La diffusion en continu ne commence pas lorsque vous appelez à response.build() mais plutôt lorsque votre méthode se termine.

Si vous souhaitez que le dialogue de téléchargement soit correct, vous devez renvoyer la bonne valeur de Content-Disposition l'en-tête. Voir aussi Comment définir l'en-tête de réponse dans JAX-RS pour que l'utilisateur voie une fenêtre contextuelle de téléchargement pour Excel ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X