Utilisation de CSV ouvert pour envoyer des fichiers de servleoutPutStream
Question
J'ai analysé un objet JSON envoyé à mon serveur Tomcat à l'aide de l'article et l'a transformé en fichier CSV.Je voudrais envoyer le fichier CSV à l'utilisateur.Je suis confus sur la manière d'envoyer le fichier en arrière car tous les exemples que j'ai vue de référence Un fichier réel stocké sur le serveur - mon fichier est intégré en mémoire et ne fait pas référence à un descripteur de fichier / fichier aussi loin que possibledire.
//The doPost method has already generated the String[] - I then call generateCSV
protected void generateCSV(ArrayList<String[]> data, ServletOutputStream out,
HttpServletResponse response)
{
try{
BufferedWriter buff = new BufferedWriter(new OutputStreamWriter(out));
CSVWriter writer = new CSVWriter(buff);
writer.writeAll(data);
writer.close();
sendFile(response, out);
}catch(IOException | ServletException e){
e.printStackTrace();
}
}
protected void sendFile(HttpServletResponse response, ServletOutputStream outstream)throws ServletException, IOException
{
response.setContentType("application/octet-stream");
outstream.flush();
outstream.close();
}
La solution
Que devez-vous faire pour envoyer un fichier à l'utilisateur d'un servlet?
- Définissez le type de contenu.
- Écrivez les octets.
me semble que vous faites cela, mais dans le mauvais ordre.En outre, plutôt que d'utiliser l'application / l'octet-flux, vous voudrez peut-être réellement dire au navigateur, c'est CSV.Vous voudrez peut-être aussi lui donner un nom de fichier.
response.setContentType("text/csv");
response.setHeader("Content-Disposition","filename=whatever.csv");
BufferedWriter buff = new BufferedWriter(new OutputStreamWriter(out));
CSVWriter writer = new CSVWriter(buff);
writer.writeAll(data);
writer.close();