Die Library kümmert sich um Probleme wie
- multipart/form-data
- Mime Types
- Parsen des Requests
- temporäre Dateien (und das Aufräumen, was von den Entwicklern gerne vergessen wird)
- Upload in Memory (ohne temp. Dateien) bei kleineren Dateien. Autom. Umschalten auf File-Modus, wenn die Datei zu groß ist.
- Streamen in eine Datenbank
- Get-Methoden für Informationen über den Upload (Filesize, Filename, Filetype)
- FileUpLoad unterstützt sogar die Interaktion mit Viren-Scannern
- Begrenzung der max. übertragbaren Dateigröße (Sicherheit)
Wie funktioniert der File Upload?
HTML-Formular auf dem Client
Ausgangspunkt ist ein HTML-Formular nach RFC 1867.
<FORM ENCTYPE="multipart/form-data" ACTION="_URL_" METHOD=POST>
Datei: <INPUT NAME="userfile1" TYPE="file"/>
Kommentar: <INPUT TYPE=text" name="comment" length="10"/>
<INPUT TYPE="submit" VALUE="Send File"/>
</FORM>
Der Browser startet eine Dateiauswahl, öffnet die Datei von der (lokalen) Festplatte, kodiert (encode) die Datei und schickt sie zusammen mit den anderen Variablen (z.B. einem Kommentar) als multipart/form-data an den Server (POST-Methode).
Dort wird der Request geschickt einem Servlet in Empfang genommen.
Decoding auf dem Server
Die weitere Verarbeitung erfolgt dann (mit Java) im Server.
Hier wird der Request zunächst dekodiert. Die auch im Request enthaltene Datei muß dekodiert und verarbeitet werden.
Die vom Brower geschickten Daten sehen z.B. so aus:
Content-type: multipart/form-data, boundary=AaB03x --AaB03x content-disposition: form-data; name="comment" Dies ist ein Kommentar --AaB03x content-disposition: form-data; name="userfile1"; filename="file1.txt" Content-Type: text/plain ... Inhalt von of file1.txt ... --AaB03x--
Verarbeitung
Die Verarbeitung erfolgt dann in einer Schleife
// Process the uploaded items Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (item.isFormField()) { // 'normales Formularfeld (z.B. comment) String name = item.getFieldName(); String value = item.getString(); ... } else { // Inhalt der Datei verarbeiten /z.B. userfile1 String fieldName = item.getFieldName(); String fileName = item.getName(); String contentType = item.getContentType(); boolean isInMemory = item.isInMemory(); long sizeInBytes = item.getSize(); ... } }
Natürlich kann der Request auch in anderen Sprachen (z.B. php) verarbeitet werden.
Weitere nützliche Apache Commons Komponenten
| Components | |
|---|---|
| Attributes | Runtime API für metadata Attribute wie doclet tags. |
| BeanUtils | Easy-to-use wrappers für die Java reflection und introspection APIs. |
| Betwixt | Services zum Mappen von JavaBeans auf XML Dokumente (und zurück). |
| Chain | Chain of Responsibility pattern implemention. |
| CLI | Command Line Argumente parsen. |
| Codec | Generellle encoding/decoding Algorithmen (z.B. example phonetic, base64, URL). |
| Collections | Extends or augments the Java Collections Framework. |
| Compress | Kompressions-API (tar, zip und bzip2 Dateien). |
| Configuration | Lesen von Konfigurations-/Preferences Dateien in unterschiedlichen Formaten. |
| Daemon | Alternative invocation mechanism for unix-daemon-like java code. |
| DBCP | Database connection pooling services. |
| DbUtils | JDBC helper library. |
| Digester | XML-to-Java-object mapping utility. |
| Discovery | Tools for locating resources by mapping service/reference names to resource names. |
| EL | Interpreter f+r die Expression Language (Definiert in der JSP 2.0 Spezifikation). |
| Library zum Versand von e-mail mit Java. | |
| Exec | API für externe Prozessaufrufe und Environment (Umgebungsvariablen) Management in Java. |
| FileUpload | File upload capability for your servlets and web applications. |
| IO | Sammlung I/O Utilities. |
| JCI | Java Compiler Interface |
| Jelly | XML based scripting und processing engine. |
| Jexl | Expression language which extends the Expression Language of the JSTL. |
| JXPath | Utilities for manipulating Java Beans using the XPath syntax. |
| Lang | Provides extra functionality for classes in java.lang. |
| Launcher | Cross platform Java application launcher. |
| Logging | Wrapper around a variety of logging API implementations. |
| Math | Lightweight, self-contained mathematics and statistics components. |
| Modeler | Mechanisms to create Model MBeans compatible with JMX specification. |
| Net | Sammlung von Network Ultilities und Protokoll-Implementierungen. |
| Pool | Generic object pooling component. |
| Primitives | Smaller, faster and easier to work with types supporting Java primitive types. |
| Proxy | Library for creating dynamic proxies. |
| Sanselan | A pure-Java image library. |
| SCXML | An implementation of the State Chart XML specification aimed at creating and maintaining a Java SCXML engine. It is capable of executing a state machine defined using a SCXML document, and abstracts out the environment interfaces. |
| Transaction | Implementations for multi level locks, transactional collections and transactional file access. |
| Validator | Framework to define validators and validation rules in an xml file. |
| VFS | Virtual File System component for treating files, FTP, SMB, ZIP and such like as a single logical file system. |

