IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
logo

FAQ StrutsConsultez toutes les FAQ

Nombre d'auteurs : 25, nombre de questions : 96, dernière mise à jour : 23 février 2015  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums de http://www.developpez.com et de l'expérience personnelle des auteurs.

Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rédacteur, lisez ceci.

SommaireFormulairesFichiers (4)
précédent sommaire suivant
 

Il faut déclarer un formulaire d'envoi du fichier dans la JSP :

Code JSP : Sélectionner tout
1
2
3
4
<html:form action="/upload.do?from=sender" method="post" enctype="multipart/form-data"> 
   <html:file property="fichier"/> 
   ... 
</html:form>

Ensuite, il faut créer un bean que l'on nommera pour l'exemple "UploadForm" :

Code Java : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class UploadActionForm extends ActionForm 
{ 
   protected FormFile fichier; 
  
   public FormFile getFichier()  
   {    
      return fichier; 
   } 
  
   public void setFile(FormFile fichier)  
   { 
      this.fichier = fichier; 
   } 
   ... 
}

Il faut créer aussi dans l'Action idoine "UploadAction" contenant :

Code Java : Sélectionner tout
1
2
3
4
5
6
{ 
   ... 
   UploadActionForm theForm = (UploadActionForm) actionForm; 
   FormFile file = theForm.getFichier(); 
   ... 
}

Voilà, vous avez votre objet implémentant FormFile [org.apache.struts.upload], que vous pouvez manipuler sur le serveur.

Mis à jour le 13 mai 2004 RanDomX

Dans l'action, il faut récupérer le nom du fichier à envoyer (filename).
Ensuite, il faut ouvrir le stream de l'objet response et y envoyer le flux de données correspondant au fichier comme ceci :

Code java : Sélectionner tout
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
File f = ...; 
String filename = f.getName(); 
response.setContentType("multipart/zip");  
response.setHeader("Content-Disposition", 
                   "attachment; filename=\"" +  
                   filename + "\";");  
response.setContentLength((int)f.length());  
  
try 
{ 
      OutputStream os = response.getOutputStream(); 
      FileInputStream stream = new FileInputStream(f); 
      BufferedInputStream  bis = new BufferedInputStream(stream); 
      InputStream is = new BufferedInputStream(bis); 
      int count; 
      byte buf[] = new byte[4096]; 
      while ((count = is.read(buf)) > -1) 
      { 
          os.write(buf, 0, count); 
      } 
      is.close();  
      os.close(); 
} 
catch (Exception ex) 
{  
   ex.printStackTrace(); 
} 
.. 
return mapping.findforward("fichieenvoye");

Ceci provoque l'ouverture d'une boîte de dialogue vous invitant à enregistrer localement le fichier et vous redirige vers la ressource correspondant au mapping "fichieenvoye".

Mis à jour le 13 mai 2004 RanDomX

Prenons l'exemple d'un fichier PDF.
Dans la page (par exemple) on a :

Code JSP : Sélectionner tout
1
2
3
4
5
6
<html:link page="/openpdf.do" 
           name="pdfForm" 
           property="pdfName" 
           target="_blank"> 
   <html:img src="./images/PDF.gif" border="0" alt="View PDF"/> 
</html:link>

Dans la méthode execute de l'Action :

Code java : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
ByteArrayOutputStream bos = new ByteArrayOutputStream(5000); 
// Remplir ici votre bos avec le flux du PDF  
  
  
httpServletResponse.setContentType("application/pdf"); 
httpServletResponse.setContentLength(bos.size()); 
  
OutputStream os = httpServletResponse.getOutputStream(); 
os.write(bos.toByteArray(), 0, bos.size()); 
os.flush(); 
os.close(); 
  
return null;

Le fichier PDF s'ouvre alors dans le navigateur.

Mis à jour le 13 mai 2004 RanDomX

Cet exemple présente comment proposer à l'utilisateur un fichier à télécharger.

Dans notre exemple, ce fichier sera un fichier XML.

Voici le code la vue (avec velocity) :

Code : Sélectionner tout
1
2
3
#sform("name=form" "theme=simple" "action=exportXmlFile") 
   #ssubmit("value=Export")						 
#end
Voici le code du fichier struts-config.xml :
Code XML : Sélectionner tout
1
2
3
4
5
6
7
8
<action name="exportXmlFile" class="ImportExportPageLoadAction" method="exportXmlFile"> 
  <result name="success" type="stream"> 
    <param name="contentType">application/xml</param> 
    <param name="inputName">inputStream</param> 
    <param name="contentDisposition">attachment;filename="${fileName}"</param> 
    <param name="bufferSize">1024</param> 
  </result> 
</action>

La mention "attachment" permet que le fichier ne soit pas ouvert par le browser.

Voici le code de l'action :
Code Java : Sélectionner tout
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package be.pulsar.mica.actions.administration.importExport; 
  
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.InputStream; 
  
import org.apache.log4j.Logger; 
  
import be.pulsar.mica.actions.common.MicaAction; 
import be.pulsar.mica.business.xml.XmlService; 
  
public class importExportPageLoad extends MicaAction { 
  
	private static final Logger logger = Logger.getLogger(importExportPageLoad.class); 
	private static final Boolean debug = logger.isDebugEnabled(); 
  
	private XmlService xmlService; 
	private String fileName; 
	private InputStream inputStream; 
  
  
	public String exportXmlFile(){ 
		if(debug)logger.debug("exportXmlFile start");		 
  
		try { 
			this.inputStream = new FileInputStream(xmlService.generateXmlFile()); 
			this.fileName = "ICAC_CYCLE.xml"; 
			if(debug)logger.debug("exportXmlFile success"); 
		} catch (FileNotFoundException e) { 
			if(debug)logger.debug("exportXmlFile failed", e); 
		} 
  
		return SUCCESS; 
	} 
  
	public String getFileName() { 
		return fileName; 
	} 
  
	public void setFileName(String fileName) { 
		this.fileName = fileName; 
	} 
  
	public XmlService getXmlService() { 
		return xmlService; 
	} 
  
	public void setXmlService(XmlService xmlService) { 
		this.xmlService = xmlService; 
	} 
  
	public InputStream getInputStream() { 
		return inputStream; 
	} 
  
	public void setInputStream(InputStream inputStream) { 
		this.inputStream = inputStream; 
	} 
 }

Mis à jour le 23 février 2015 fxjtarga Robin56

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2022 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.