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 :
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:
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.
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 :
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 !
Partager