télécharger fichier en mode asynchrone
Bonjour,
J'essaie de télécharger un fichier CSV d'un serveur tomcat vers un navigateur.
J'ai le code Java suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
response.setContentType("application/csv");
response.setHeader("Content-Disposition", "attachment;filename=timefull.xml");
ServletOutputStream out = response.getOutputStream();
File file = null;
BufferedInputStream from = null;
try {
//dans mon cas le filepath et le path complet après création
// d'un temp file
String filepath = Environment.getEnv().getWebContentPath() + "\\graph\\34\\timefull.xml";
file = new File(filepath);
response.setContentLength((int) file.length());
int bufferSize = 64 * 1024;
long time = System.currentTimeMillis();
try {
from = new BufferedInputStream(new FileInputStream(file), bufferSize * 2);
byte[] bufferFile = new byte[bufferSize];
for (int i = 0; ; i++) {
int len = from.read(bufferFile);
if (len < 0) break;
out.write(bufferFile, 0, len);
}
out.flush();
} finally {
try {
from.close();
} catch (Exception e) { }
try {
out.close();
} catch (Exception e) {}
}
time = (System.currentTimeMillis() - time) / 1000;
// seconds download
double kb = (file.length() * 1.0 / 1024);
if (file != null) file.delete();
} catch (Exception e) {
return;
} finally {
try {
file.delete();
} catch (Exception ex) {}
} |
Il fonctionne très bien dans la méthode doPost de la servlet "Test" quand je l'appelle en mode non-asynchrone, c'est à dire à partir de la page html avec ce code là:
Code:
1 2 3 4
|
<form method="post" action="./Test">
<input type="submit" value="DL"></input>
</form> |
En revanche, quand je l'appelle de manière asynchrone via javascript, le fichier est bien envoyé par la servlet, mais je n'arrive pas à la gérer avec javascript.
J'ai le code javascript suivant :
Code:
1 2
|
var responseHeader = req.getResponseHeader("Content-Type"); |
Ma variable responseHeader contient bien la chaîne "application/csv".
Mais que faire ensuite pour que la fenêtre d'acceptation de téléchargement apparaisse ?
Merci d'avance.