[servlet] FileDownload java
j'ai un problème, j'ai fait un programme qui à partir d'une requête de la servlet doit envoyer un fichier (créer dynamiquement) au client. Le client reçoit un OutputStream en reponse comment faire pour pouvoir réupérer le fichier et l'enregistrer dans un dossier sans que l'utilisateur fasse un "save as".
Merci.
Re: [servlet] FileDownload java
Citation:
Envoyé par salber
comment faire pour pouvoir réupérer le fichier et l'enregistrer dans un dossier sans que l'utilisateur fasse un "save as".
Il faut que tu ajoutes un entete http à ta reponse (HttpServletResponse), cet entete est nommé Content-disposition, tu trouveras des exemples sur google.
Re: [servlet] FileDownload java
Citation:
Envoyé par karmelitre
Citation:
Envoyé par salber
comment faire pour pouvoir réupérer le fichier et l'enregistrer dans un dossier sans que l'utilisateur fasse un "save as".
Il faut que tu ajoutes un entete http à ta reponse (HttpServletResponse), cet entete est nommé Content-disposition, tu trouveras des exemples sur google.
En effet je fais ceci:
Code:
1 2 3 4 5 6 7
| private void sendSynchroResponse(HttpServletResponse response) throws Exception {
response.setContentType("application/octet-stream");
ObjectOutputStream output = new ObjectOutputStream(response.getOutputStream());
output.writeObject(new File("C:\\Program Files\\vide.zip"));
output.flush();
output.close();
} |
blablabla
à la reception je fais:
Code:
1 2 3 4 5 6
|
InputStream instr = urlConn.getInputStream();
ObjectInputStream inputFromServlet = new ObjectInputStream instr);
vide = (File)inputFromServlet.readObject();
inputFromServlet.close();
instr.close(); |
Mais ca ne marche pas. Il me renvoie une erreur comme quoi la page est incorrecte.
Re: [servlet] FileDownload java
Je ne comprends plus, ton client est un navigateur ou un programme Java ?
Re: [servlet] FileDownload java
Citation:
Envoyé par karmelitre
Je ne comprends plus, ton client est un navigateur ou un programme Java ?
Je crois que je suis pas très clair, en fait mon client est un client java qui communique avec un servlet en envoyant une requete et attendre un fichier en reponse. Comme c'est pas moi qu est fait le serveur j'ai pas trop le choix je suis obligé de passer par le servlet.
Mon client est bien un client lourd mais qui envoie des requtes Http au format multipart.
Re: [servlet] FileDownload java
Ok, et si j'ai bien saisi, tu desires envoyer le contenu d'un fichier à ton client java. Tu essayes dans la servlet de serialzer l'objet File et de le deserializer dans le client java. Dans ce cas tu essayes d'nevoyer un pointeur et non pas la donnée.
Voici un petit exemple serveur :
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
|
// On ouvre le fichier
FileInputStream fic = new FileInputStream ("C:\\temp\\tonfic.zip");
// On le lit completement dans untableau de bits
byte[] data = new byte[0];
byte [] buffer = new byte [256];
int taille;
while ((taille= fic.read(buffer)) > 0) { // tant qu'il y a quelque chose à lire
//on alloue un nouveau tableau
byte [] data2 = new byte[data.length+taille];
// on recopie dedans les données deja lues
System.arraycopy(data,0,data2,0,data.length);
// On recopier dedans les données tout juste lues
System.arraycopy(buffer,0,data2,data.length,taille);
// ancien tableau = nouveau tableau
data = data2;
}
// definition du mime type du retour
response.setContentType("application/octet-stream");
// definition de la taille du retour
response.setContentLength(data.length);
// on ecrit la donnée
response.getOutputStream().write(data); |
Et pour le client :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
InputStream is = httpConn.getInputStream();
// On le lit completement dans un tableau de bits
byte[] data = new byte[0];
byte [] buffer = new byte [256];
int taille;
while ((taille= is.read(buffer)) > 0) { // tant qu'il y a quelque chose à lire
//on alloue un nouveau tableau
byte [] data2 = new byte[data.length+taille];
// on recopie dedans les données deja lues
System.arraycopy(data,0,data2,0,data.length);
// On recopier dedans les données tout juste lues
System.arraycopy(buffer,0,data2,data.length,taille);
// ancien tableau = nouveau tableau
data = data2;
}
// Ensuite tu fait ce que tu veux des données, apr xemple ecrire dans un fichier
FileOutputStream fos = new FileOutputStream("C:\\temp\\toto.zip");
fos.write(data);
fos.flush();
fos.close(); |
Il y a plus court mais c'est moins evident à comprendre.
a+
Re: [servlet] FileDownload java
Je viens de tester et ca marche très bien, je te remercie c'est vraiment cool.