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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Struts 1 Java Discussion :

Probleme de recuperer les fields "file" avec ServletFileUpload


Sujet :

Struts 1 Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 30
    Par défaut Probleme de recuperer les fields "file" avec ServletFileUpload
    bonjour,
    ma page jsp contient plusieurs champs de type "file" mais je voudrais recuperer ces fichiers pour les uploadé alors jutilise le jar d'apache et voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
    List fileItemsList = servletFileUpload.parseRequest(request);
    System.out.print("taille de Items: "fileItemsList.size());
    le probleme quand j'affiche fileItemList il est vide.

  2. #2
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    Est ce que tu a mis dans le form l'attribut enctype="multipart/form-data" ?

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 30
    Par défaut
    Ceci est mon code:

    code de la jsp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    <%@ include file="header.inc.jsp" %>
    <script>
    function MultiSelector( list_target, max ){
    	if(!isNaN(max)&& max>0){
    	this.list_target = list_target;
    	this.count = 0;
    	this.id = 1;
    	if( max ){
    		this.max = max;
    	} else {
    		this.max = -1; 
    	};
    	this.addElement = function( element ){
    		if(element.tagName == 'INPUT' && element.type == 'file' ){
    			element.name = 'fichier_' + this.id++;
    			element.multi_selector = this;
    			element.onchange = function(){
     
    					var new_element = document.createElement( 'input' );
    					new_element.type = 'file';
    					new_element.style.width='300';
    					new_element.style.height='20';
    					this.parentNode.insertBefore( new_element, this );
    					this.multi_selector.addElement( new_element );
    					this.multi_selector.addListRow( this );
    					this.style.position = 'absolute';
    					this.style.left = '-1000px';
     
     
    			};
    				if( this.max != -1 && this.count >= this.max ){
    					element.disabled = true;
    				};
    				this.count++;
    				this.current_element = element;
    		}
    				 else {
    				 	alert( 'Error: not a file input element' );
    				 };
    		};
    				 this.addListRow = function( element ){				 	
    				 	var new_row = document.createElement( 'div' );
    					var new_row_button = document.createElement( 'input' );
    					new_row_button.type = 'button';
    					new_row_button.value = 'Supprimer';					
    					new_row.element = element;
    					new_row_button.onclick= function(){
    						this.parentNode.element.parentNode.removeChild( this.parentNode.element );
    						this.parentNode.parentNode.removeChild( this.parentNode );
    						this.parentNode.element.multi_selector.count--;
    						this.parentNode.element.multi_selector.current_element.disabled = false;
    						return false;
    					};										
    					new_row.innerHTML = element.value;
    					new_row.appendChild( new_row_button );
    					this.list_target.appendChild( new_row );
    				};
    		}
    		};
    </script>
    <div id="corps">
        <html:form action="/edit" method="post" enctype="multipart/form-data" >
        <div align="center">
     
     
    <table cellpadding="0" cellspacing="5">
     
     
        			<tr>
        				<td colspan="2" align="left"> 
        					<input type="FILE"  style="width: 300px;height: 20px" id="mes_fichiers" name="fichier_1">
        				</td>
        			</tr>
        			<tr>
        				<td colspan="2" align="left"><div id="liste_fichiers"></div></td>
        				<script>    				
    						var multi_selector = new MultiSelector( document.getElementById( 'liste_fichiers' ), 15);
    						multi_selector.addElement( document.getElementById( 'mes_fichiers' ) );
    					</script>
        			<tr>
        			<			
        		</table>
        		<br>
        		<html:submit styleClass="bouton">valider</html:submit>
        		<html:reset styleClass="bouton">reset</html:reset>    		    		
     
        		</div>    		
        	</div>
        	<br><br><br><br>  
        </div>
        </html:form>
     
     <%@ include file="footer.inc.jsp" %>
    code de la form:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    public class EditionForm extends ActionForm {
     
    	private static final long serialVersionUID = 1L;
     
    	private FormFile fichier_1;
    	private FormFile fichier_2;
    	private FormFile fichier_3;
     
     
     
    	public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
    		ActionErrors errors = new ActionErrors();
    		//code de verification
     
    		return errors;
    	}
     
    	public FormFile getFichier_2() {
    		return fichier_2;
    	}
     
    	public void setFichier_2(FormFile fichier_2) {
    		this.fichier_2 = fichier_2;
    	}
     
    	public FormFile getFichier_3() {
    		return fichier_3;
    	}
     
    	public void setFichier_3(FormFile fichier_3) {
    		this.fichier_3 = fichier_3;
    	}
     
    	public FormFile getFichier_1() {
    		return fichier_1;
    	}
     
    	public void setFichier_1(FormFile fichier_1) {
    		this.fichier_1 = fichier_1;
    	}
     
    }
    code l'action:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    public class EditionAction extends Action{
     
    	public ActionForward execute(ActionMapping mapping, ActionForm form, 
    			HttpServletRequest request, HttpServletResponse response) {
     
    		HttpSession session = request.getSession();
    		EditionForm editionForm = (EditionForm)form;	
     
    		ServletFileUpload(new DiskFileItemFactory());
    		ServletFileUpload servletFileUpload = new ServletFileUpload();
    		DiskFileUpload upload = new DiskFileUpload();
     
    		List items = null;
    		try {
    			 items = upload.parseRequest(request);
    			 System.out.println("size: "+items.size()+" "+request.getInputStream().read());
    		} catch (FileUploadException e2) {
    			// TODO Auto-generated catch block
    			e2.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
     
    //code qui fonctinne
    		FormFile myFile = editionForm.getFichier_1();
    		String nameDir = myFile.getFileName();
    		File fichier=null;
    			fichier=new File("c:\\temp\\"+nameDir);
    			fichier.mkdir();
    			byte[] fileData;
    			try {						
    				fileData = myFile.getFileData();
    				FileOutputStream out = new FileOutputStream("c:\\temp\\"+fichier.getName()+"\\"+myFile.getFileName());
    		        out.write(fileData);				        
    		        out.close();
    		        out.flush();
    			} catch (FileNotFoundException e) {						
    				e.printStackTrace();
    			} catch (IOException e) {						
    				e.printStackTrace();
    			}
     
     
    		return mapping.findForward("success");
    	}
    le commentaire "//code qui fonctinne" indique que ce code fonctionne mais si j'utilise 20 champ file il me faut 20 setter et getter pour palier à ca j'ai voulu utiliser le servletfileupload pour recuperer ces champs dans un seul coup.

    merci.

  4. #4
    Membre émérite
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Par défaut
    Bonjour,

    Si le code marche avec des setters et getters par FormFile, pourquoi ne pas utiliser une propriété indexé ?

    dans le Form, il y aurait non plus n FormFile mais 1 FormFile[n] et dans la jsp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="FILE"  style="width: 300px;height: 20px" id="mes_fichiers" name="fichier[1]">
    ou mieux en utilisant les tag Struts <html:file indexed="true"...>

Discussions similaires

  1. [Continuum] [Maven2] probleme pour recuperer les ressources
    Par willoi dans le forum Intégration Continue
    Réponses: 4
    Dernier message: 24/04/2009, 10h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo