Bonsoir !
InputStream is= new FileInputStream("d:/fichier.mp3");
//on ouvre un flux d'entrée vers ce fichier parce qu'on va le parcourir pour le lire
OutputStream os = response.getOutputStream();
//on déclare os comme flux de sortie et on lui affecte la réponse du serveur vers le client
response.setHeader("Content-Disposition","attachment;filename=fichier.mp3");
//on informe le client (browser html) que ce qu'il va recevoir du serveur est un fichier qui s'appelle fichier.mp3
int count;
byte buf[] = new byte[4096];
//Ici on déclare un buffer de 4Ko
while ((count = is.read(buf)) > -1) { //la boucle s'arrête lorsqu'il n'y a plus de données à lire dans is
//on lit 4Ko de données dans is, et on stocke ça dans notre buffer buf
os.write(buf, 0, count);
//on écrit notre buffer (donc nos 4Ko de données) dans notre response
}
is.close();
os.close();
//on ferme les 2 flux pour libérer de l'espace (et pour envoyer la response)
Pour résumer on ne fait que parcourir un fichier présent sur le serveur (ici fichier.mp3) afin de le copier bit-à-bit dans le flux de réponse, que l'on va envoyer au client.
Cordialement,
rtfm and jfgi