Bonjour, je cherche à uploader un fichier via un formulaire, j'utilise la derniere version de Tomcat et mon ide c'est eclipse.

J'ai un formulaire basique pour l'instant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
<form  enctype="multipart/form-data" action="Ajout.do" method="post"><br>
<input type="file" name="infile"><br>
<input type="submit" name="submit" value="Continue"><br>
</form><br>
J'ai chercher plusieurs documentation et je comprends pas trop le fonctionement de l'api Jakarta
J'ai vu un message du forum qui expliquait bien le fonctionement mais malheuresement je n'ai pas tout compris...

J'ai plusieurs questions, la premiere pour le repertoire "temporaire" ou les fichiers vont être stocker, J'ai choisi:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 String yourTempDirectory = "C:\\Program Files\\Apache Software Foundation\\Tomcat 7.0\\temp";
Je suppose que tomcat a les droits d'écriture. Mais ne serais ce pas mieux de mettre un lien relatif? Dans ce cas quel est la postion courante de mon api j'ai
http://localhost:8080/nomDuProjet/Ajout.jsp donc je serais dans
"C:\\Program Files\\Apache Software Foundation\\Tomcat 7.0\\WEBAPPS\\nomduProjet" ?

J'arrive pas a comprendre le fonctionement pour récupérer le champs file du formulaire.
Donc voila le code que j'ai récupérer du post cité plus haut.

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
 
// Create a new file upload handler
		DiskFileItemFactory fileItemFactory = new DiskFileItemFactory( );
 
		ServletFileUpload upload = new ServletFileUpload( fileItemFactory );
 
		// Set upload parameters
		int yourMaxMemorySize = 512 * 1024 * 8; // en bytes
		int yourMaxRequestSize = 1024 * 1024 * 8;
		String yourTempDirectory = "C:\\Program Files\\Apache Software Foundation\\Tomcat 7.0\\temp"; // un répertoire ou tomcat a le droit d'écrire
 
		fileItemFactory.setSizeThreshold( yourMaxMemorySize );
 
		// upload.setSizeThreshold(yourMaxMemorySize);
		upload.setSizeMax( yourMaxRequestSize );
		// upload.setRepositoryPath(yourTempDirectory);
 
		// Parse the request -on recupère tous les champs du formulaire
		List items;
		try
		{
			items = upload.parseRequest(request);
 
			// Process the uploaded items
			Iterator iter = items.iterator( );
			while ( iter.hasNext( ) )
			{
				System.out.println( "Ecriture directe" );
				FileItem item = (FileItem) iter.next( );
 
				// Process a regular form field
				if ( item.isFormField( ) )
				{
					System.out.println( "IF" );
					String name = item.getFieldName( );
					String value = item.getString( );
 
				}
				// Process a file upload
				else
				{
					System.out.println( "Else" );
					String fieldName = item.getFieldName( );
					String fileName = item.getName( );
					String contentType = item.getContentType( );
					boolean isInMemory = item.isInMemory( );
					long sizeInBytes = item.getSize( );
 
					boolean writeToFile = true;
					// Copie directe pour les petits fichiers, sinon streaming (le
					// streaming ne marche pas)
					if ( sizeInBytes > 512 * 1024 * 8 ) writeToFile = false;
 
					// Process a file upload
					if ( ( writeToFile ) & ( fieldName.equals( "source" ) ) )
					{ // Ecriture directe
						System.out.println( "Ecriture directe" );
						File uploadedFile = new File( yourTempDirectory + fileName );
						item.write( uploadedFile );
					}
					else
					{ // Streaming
						File uploadedFile = new File( yourTempDirectory + fileName ); // ou
						// sinon un nouveau nom de fichier à la place de fileName
						InputStream sourceFile;
						try
						{
							sourceFile = item.getInputStream( );
							OutputStream destinationFile;
							try
							{
								destinationFile = new FileOutputStream( uploadedFile );
								byte buffer[] = new byte[512 * 1024];
								int nbLecture;
								while ( ( nbLecture = sourceFile.read( buffer ) ) != -1 )
								{
									destinationFile.write( buffer, 0, nbLecture );
								}
								sourceFile.close( );
							}
							catch ( Exception ee )
							{
								// TODO Auto-generated catch block
								ee.printStackTrace( );
							}
 
						}
						catch ( IOException ie )
						{
							// TODO Auto-generated catch block
							ie.printStackTrace( );
						}
					}
 
				}
			}
		}
 
		catch ( Exception e )
		{
			// TODO Auto-generated catch block
			e.printStackTrace( );
		}
Donc voila mon problème maintenant c'est que ça ne fonctionne pas (on ne sans douterai pas ) mais j'aimerais surtout comprendre comment ça fonctionne . Ah oui j'ai aussi vu le champ dans le formulaire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
enctype="multipart/form-data"
je me demandais à quoi ca servait, à ce que j'ai compris c'est pour récupérer le champ file, et la methode doit forcément être post. enfin c'est encore obscur dans mes pensées...
merci !