Téléchargez le fichier audiodescription : Partie 4, Chapitre 2
Vous trouverez sous la vidéo les codes source du cours.
Codes source
Le fichier web.xml qui configure notamment la taille maximale des uploads :
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>Test</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>com.octest.servlets.Test</servlet-class>
<multipart-config>
<location>/Users/mateo21/fichierstmp/</location> <!-- A adapter chez vous -->
<max-file-size>10485760</max-file-size> <!-- 10 Mo -->
<max-request-size>52428800</max-request-size> <!-- 5 x 10 Mo -->
<file-size-threshold>1048576</file-size-threshold> <!-- 1 Mo -->
</multipart-config>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/bonjour</url-pattern>
</servlet-mapping>
</web-app>
La servlet Test.java qui gère ici l'upload :
package com.octest.servlets;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import com.octest.forms.ConnectionForm;
/**
* Servlet implementation class Test
*/
@WebServlet("/Test")
public class Test extends HttpServlet {
private static final long serialVersionUID = 1L;
public static final int TAILLE_TAMPON = 10240;
public static final String CHEMIN_FICHIERS = "/Users/mateo21/fichiers/"; // A changer
public Test() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.getServletContext().getRequestDispatcher("/WEB-INF/bonjour.jsp").forward(request, response);
}
public void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
// On récupère le champ description comme d'habitude
String description = request.getParameter("description");
request.setAttribute("description", description );
// On récupère le champ du fichier
Part part = request.getPart("fichier");
// On vérifie qu'on a bien reçu un fichier
String nomFichier = getNomFichier(part);
// Si on a bien un fichier
if (nomFichier != null && !nomFichier.isEmpty()) {
String nomChamp = part.getName();
// Corrige un bug du fonctionnement d'Internet Explorer
nomFichier = nomFichier.substring(nomFichier.lastIndexOf('/') + 1)
.substring(nomFichier.lastIndexOf('\\') + 1);
// On écrit définitivement le fichier sur le disque
ecrireFichier(part, nomFichier, CHEMIN_FICHIERS);
request.setAttribute(nomChamp, nomFichier);
}
this.getServletContext().getRequestDispatcher("/WEB-INF/bonjour.jsp").forward(request, response);
}
private void ecrireFichier( Part part, String nomFichier, String chemin ) throws IOException {
BufferedInputStream entree = null;
BufferedOutputStream sortie = null;
try {
entree = new BufferedInputStream(part.getInputStream(), TAILLE_TAMPON);
sortie = new BufferedOutputStream(new FileOutputStream(new File(chemin + nomFichier)), TAILLE_TAMPON);
byte[] tampon = new byte[TAILLE_TAMPON];
int longueur;
while ((longueur = entree.read(tampon)) > 0) {
sortie.write(tampon, 0, longueur);
}
} finally {
try {
sortie.close();
} catch (IOException ignore) {
}
try {
entree.close();
} catch (IOException ignore) {
}
}
}
private static String getNomFichier( Part part ) {
for ( String contentDisposition : part.getHeader( "content-disposition" ).split( ";" ) ) {
if ( contentDisposition.trim().startsWith( "filename" ) ) {
return contentDisposition.substring( contentDisposition.indexOf( '=' ) + 1 ).trim().replace( "\"", "" );
}
}
return null;
}
}
Enfin, voici notre formulaire dans la JSP :
<%@ page pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Test</title>
</head>
<body>
<c:if test="${ !empty fichier }"><p><c:out value="Le fichier ${ fichier } (${ description }) a été uploadé !" /></p></c:if>
<form method="post" action="bonjour" enctype="multipart/form-data">
<p>
<label for="description">Description du fichier : </label>
<input type="text" name="description" id="description" />
</p>
<p>
<label for="fichier">Fichier à envoyer : </label>
<input type="file" name="fichier" id="fichier" />
</p>
<input type="submit" />
</form>
</body>
</html>