0

En essayant d'enrouler ma tête autour de Java Out/Inputstreams, fermeture et rinçage. J'ai une situation où je veux créer un fichier using Apache POI avec des données d'un serveur. Je voudrais que le fichier commence à télécharger dès que je récupère le premier enregistrement de la base de données (Afficher le fichier au bas du navigateur a commencé à télécharger).Java outputtream, téléchargement du fichier de trigger avant toutes les données récupérées depuis la base de données

public void createExcelFile(final HttpServletResponse response, 
    final Long vendorId) { 
    try { 
     // setup responses types... 

     final XSSFWorkbook xssfWorkbook = new XSSFWorkbook(); 
     final XSSFSheet sheet = xssfWorkbook.createSheet("sheets1"); 

     // create file with data 
     writeExcelOutputData(sheet, xssfWorkbook); 

     xssfWorkbook.write(response.getOutputStream()); 
     xssfWorkbook.close(); 
    } 
    catch (final Exception e) { 
     LOGGER.error("Boom"); 
    } 

Le code ci-dessus va effectuer un téléchargement de fichier sans problème, mais cela pourrait être un gros fichier. Je pars d'obtenir les données (environ 20/30 ans), puis après que le téléchargement commence < pas bon ...

Puis-je achive ce que je dois ou ce qui est la meilleure approche, grâce à l'avance

Vive:)

+0

Vous essayez de diffuser un fichier Excel? Sauf s'il s'agit d'un flux, vous ne pouvez pas l'envoyer avant qu'il ne soit terminé. –

+0

Et SI vous le faites dans un flux, vous ne serez pas en mesure de le télécharger. Le navigateur côté client devra l'interpréter avec un plugin. –

+0

Je vais retourner les données par lots ... donc le déclenchement du fichier pour commencer le téléchargement avant que tous les lots sont relancés est impossible ??? – rogger2016

Répondre

2

les raisons peuvent être les suivantes:

  1. peut-être il y a un délai d'attente de lecture/écriture avec votre serveur http, alors si le processus devient long ou becasue de faible bande passante, de sorte que la connexion sera fermée par le serveur.

  2. Assurez-vous que le processus (le travail Excel) est complètement terminé, peut-être qu'il y aurait une erreur/exception au travail.

La solution de Jorge semble très prometteuse. L'utilisateur a besoin une fois de demander un fichier, puis le serveur effectue le travail en arrière-plan et ensuite le processus de travail et télécharge le fichier si prêt, ou le serveur informe l'utilisateur par email, notification web, etc ...

De plus, vous conserverez le fichier dans le serveur dans un fichier temporaire pendant un certain temps, et si la connexion est interrompue, le serveur répondra au fichier généré (omettez les octets envoyés, comme le téléchargement normal du fichier)

Garder une connexion en vie faire un long travail n'est pas très logique.

Encore une fois, si le fichier se prépare rapidement (très rapide) pour le téléchargement/flux, et les interruptions de téléchargement, si cela pouvait être dû à un délai de lecture/écriture par le serveur, ou un très mauvais réseau.