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

Servlets/JSP Java Discussion :

Récupérer un fichier posté dans une requête POST


Sujet :

Servlets/JSP Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Avril 2008
    Messages : 152
    Points : 94
    Points
    94
    Par défaut Récupérer un fichier posté dans une requête POST
    Bonjour,

    J'ai un problème sur lequel je bloque depuis 2 jours et je commence à saturer !!

    J'ai fait une vue html toute simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <FORM METHOD="POST" ACTION="http://localhost:8080/MonAppli/page/public/envoiPjExterne.seam" enctype="multipart/form-data">
           <input type="file" size="70" name="file" /><br />            
           <INPUT type="submit" value="Envoyer">            
    </FORM>
    Et dans mon appli j'ai une servlet qui dans la méthode doPost fait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    DiskFileUpload upload = new DiskFileUpload();
    upload.setSizeMax(10000000);// 10 Mo
    List items;
    try {
    	items = upload.parseRequest(request);
    	Iterator itr = items.iterator();
    	while(itr.hasNext()) {
    		FileItem item = (FileItem) itr.next();
    	}
    } catch (FileUploadException e) {
    	// TODO Auto-generated catch block
    	e.printStackTrace();
    }
    Ma liste "items" est toujours vide, je n'arrive pas à récupérer le fichier posté !

    Merci par avance !

  2. #2
    Membre à l'essai
    Homme Profil pro
    Architecte technique
    Inscrit en
    Octobre 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 13
    Points : 16
    Points
    16
    Par défaut
    J'ai fais ça il y a pas mal de temp et je sais que j'avais pas mal galéré...
    A l'époque, j'avais crée un objet MultiparRequest qui était instancié avec l'objet HttpServletRequest et un chemin temporaire sur le serveur.
    Voici le code de mon objet :
    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
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
     
    package com.naos.enews.common.utilities;
     
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileUploadBase;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.apache.commons.fileupload.servlet.ServletFileUpload;
    import org.apache.log4j.Logger;
     
    import javax.servlet.http.HttpServletRequest;
    import java.io.File;
    import java.io.IOException;
    import java.io.UnsupportedEncodingException;
    import java.net.URLEncoder;
    import java.util.*;
     
    public class MultipartRequest extends HashMap<String, List<String>> implements Constantes
    {
    	private final static Logger logger = Logger.getLogger(MultipartRequest.class);
    	private File path = null;
    	private Map<String, File> files = new HashMap<String, File>();
    	private String remoteAddr;
    	private String remoteHost;
    	private int remotePort;
    	private String remoteUser;
    	private String method;
    	private String serverName;
    	private String encoding = UTF_8;
    	private String requestUrl;
     
    	public MultipartRequest(HttpServletRequest request, File pathName)
    			throws Exception
    	{
    		this.path = pathName;
    		if (path.exists())
    		{
    			if (!path.isDirectory())
    			{
    				throw new IOException(pathName + " : exists and is not a directory...");
    			}
    		}
    		else
    		{
    			if (!path.mkdirs())
    			{
    				throw new IOException(pathName + " : Cannot create the directory... ");
    			}
    		}
    		DiskFileItemFactory factory = new DiskFileItemFactory(MAX_LENGTH_FILE, new File(TMP_SYSTEM_PATH));
    		ServletFileUpload upload = new ServletFileUpload(factory);
    		// maximum size before a FileUploadException will be thrown
    		upload.setSizeMax(MAX_LENGTH_FILE);
    		try
    		{
    			List fileItems = upload.parseRequest(request);
    			int size = fileItems.size();
    			for (Object fileItem : fileItems)
    			{
    				FileItem fi = (FileItem) fileItem;
    				String fieldName = fi.getFieldName();
    				if (fi.isFormField())
    				{
    					String value = fi.getString();
    					if (containsKey(fieldName))
    					{
    						List<String> vector = get(fieldName);
    						vector.add(value);
    					}
    					else
    					{
    						List<String> vector = new ArrayList<String>();
    						vector.add(value);
    						put(fieldName, vector);
    					}
    				}
    				else
    				{
    					String filename = fi.getName();
    					if (fi.getSize() != 0)
    					{
    						File file = new File(path, filename);
    						fi.write(file);
    						files.put(fieldName, file);
    					}
    				}
    			}
    		}
    		catch (FileUploadBase.InvalidContentTypeException e)
    		{
    			logger.debug("InvalidContentTypeException", e);
    		}
    		remoteAddr = request.getRemoteAddr();
    		remoteHost = request.getRemoteHost();
    		remotePort = request.getRemotePort();
    		remoteUser = request.getRemoteUser();
    		requestUrl = request.getRequestURL().toString();
    		method = request.getMethod();
    		serverName = request.getServerName();
    	}
     
    	public String getParameter(String name)
    	{
    		if (containsKey(name))
    		{
    			List<String> vector = get(name);
    			if (vector != null && vector.size() != 0)
    			{
    				return vector.get(0);
    			}
    			else
    			{
    				return null;
    			}
    		}
    		else
    		{
    			return null;
    		}
    	}
     
    	public File getFile(String name)
    	{
    		return files.get(name);
    	}
     
    	public Iterator getFileNames()
    	{
    		return files.keySet().iterator();
    	}
     
    	public Iterator<String> getParameterNames()
    	{
    		return keySet().iterator();
    	}
     
    	public File getPath()
    	{
    		return path;
    	}
     
    	public String[] getParameterValues(String name)
    	{
    		if (containsKey(name))
    		{
    			List vector = get(name);
    			if (vector != null && vector.size() != 0)
    			{
    				int size = vector.size();
    				String[] values = new String[size];
    				for (int i = 0; i < size; i++)
    				{
    					values[i] = vector.get(i)
    							.toString();
    				}
    				return values;
    			}
    			else
    			{
    				return null;
    			}
    		}
    		else
    		{
    			return null;
    		}
    	}
     
    	public String getQueryString()
    			throws UnsupportedEncodingException
    	{
    		Iterator<String> enumeration = getParameterNames();
    		StringBuilder queryString = new StringBuilder();
    		while (enumeration.hasNext())
    		{
    			String name = enumeration.next();
    			String value = getParameter(name);
    			queryString.append(URLEncoder.encode(name, encoding));
    			queryString.append("=");
    			queryString.append(URLEncoder.encode(value, encoding));
    			queryString.append("&");
    		}
    		int taille = queryString.length();
    		if (taille >= 2)
    		{
    			return queryString.deleteCharAt(queryString.length() - 1).toString();
    		}
    		else
    		{
    			return NaosStringUtils.EMPTY;
    		}
    	}
     
    	public String getRemoteAddr()
    	{
    		return remoteAddr;
    	}
     
    	public String getRemoteHost()
    	{
    		return remoteHost;
    	}
     
    	public int getRemotePort()
    	{
    		return remotePort;
    	}
     
    	public String getRemoteUser()
    	{
    		return remoteUser;
    	}
     
    	public String getMethod()
    	{
    		return method;
    	}
     
    	public String getServerName()
    	{
    		return serverName;
    	}
     
    	public String getRequestURL()
    	{
    		return requestUrl;
    	}
    }
    Je pense qu'il faut un peu l'adapter, mais ça devrait se faire sans trop de difficulté.
    Voilà, j'espère que ça vous dépannera.

    Cordialement,

Discussions similaires

  1. [VB6] - Pilotage IE - Déclencher une requête POST dans le navigateur
    Par samuelsiffert dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 29/07/2014, 08h16
  2. Erreur 500 dans une requête POST AJAX
    Par Netci dans le forum Services Web
    Réponses: 0
    Dernier message: 07/05/2013, 12h31
  3. [XL-2003] Envoyer le fichier Excel via une requête post
    Par totoen dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 26/10/2010, 08h19
  4. Problème d'encodage du point dans une requête POST
    Par ultraboa dans le forum ActionScript 3
    Réponses: 3
    Dernier message: 07/02/2009, 21h58
  5. Une variable $POST dans une requête
    Par Sofalkin dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2008, 17h19

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