package javacodebook.server.upload; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; import org.apache.commons.fileupload.*; /** * Ein Beispiel für File-Upload mit Hilfe eines Formulars und dem Input-Typ "file". */ public class FileUploadServlet extends HttpServlet { //Das Zielverzeichis, in das letztendlich alle hochgeladenen Dateien //kopiert werden sollen (in der Form c:\tmp oder /tmp private File targetDir; /** Beim Initialisieren wird das Verzeichnis ausgelesen, in das die * hochgeladenen Dateien gespeichert werden sollen. Es wird in der Datei * web.xml angegeben. */ public void init(ServletConfig config) throws ServletException { super.init(config); try { //hier kann eine NullPointerException geworfen werden, wenn der //Parameter nicht gesetzt ist targetDir = new File(config.getInitParameter("target_dir")); if(!targetDir.exists() || !targetDir.isDirectory()) throw new IOException(); } catch(Exception e) { throw new ServletException("Init-Parameter target_dir " + "falsch gesetzt"); } } /** Datei-Upload muss mit der Post-Methode erfolgen. Daher wird hier die * doPost()-Methode verwendet. Mit Hilfe der Klasse FileUpload wird der * Datenstrom ausgewertet, den der Browser an das Servlet schickt. Er ist * als MIME-Datenstrom kodiert (RFC 1867). */ protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, java.io.IOException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println(""); out.println("
"); //Für das Parsen des Multipart-Requests wird ein FileUpload-Objekt verwendet FileUpload fileUpload = new FileUpload(); //maximal hochgeladene Datenmenge (Formularfelder + Dateien) fileUpload.setSizeMax(1000000); //Im Speicher gehaltener Cache fileUpload.setSizeThreshold(4096); //Speicherort/temporäres Verzeichnis für die hochgeladenen Daten ServletConfig config = getServletConfig(); ServletContext context = config.getServletContext(); File tmpDir = (File)context.getAttribute("javax.servlet.context.tempdir"); fileUpload.setRepositoryPath(tmpDir.getAbsolutePath()); //Hier erfolgt das eigentliche Parsen des Requests und die Auswertung try { List fileItems = fileUpload.parseRequest(req); out.println("Folgende Daten wurden übermittelt: