JSP - Datei-Upload
In diesem Kapitel werden wir das Hochladen von Dateien in JSP behandeln. Eine JSP kann mit einem HTML-Formular-Tag verwendet werden, damit Benutzer Dateien auf den Server hochladen können. Eine hochgeladene Datei kann eine Textdatei oder eine Binär- oder Bilddatei oder einfach ein beliebiges Dokument sein.
Erstellen eines Formulars zum Hochladen von Dateien
Lassen Sie uns nun verstehen, wie Sie ein Formular zum Hochladen von Dateien erstellen. Der folgende HTML-Code erstellt ein Uploader-Formular. Im Folgenden sind die wichtigen Punkte aufgeführt, die zu beachten sind:
Die Form method Attribut sollte auf gesetzt sein POST Methode und GET-Methode können nicht verwendet werden.
Die Form enctype Attribut sollte auf gesetzt sein multipart/form-data.
Die Form actionDas Attribut sollte auf eine JSP-Datei festgelegt werden, die das Hochladen von Dateien auf dem Back-End-Server übernimmt. Das folgende Beispiel verwendetuploadFile.jsp Programmdatei zum Hochladen der Datei.
Um eine einzelne Datei hochzuladen, sollten Sie eine einzelne verwenden <input .../> Tag mit Attribut type = "file". Um das Hochladen mehrerer Dateien zu ermöglichen, fügen Sie mehr als ein Eingabe-Tag mit unterschiedlichen Werten für das Namensattribut hinzu. Der Browser ordnet jedem von ihnen eine Schaltfläche zum Durchsuchen zu.
<html>
<head>
<title>File Uploading Form</title>
</head>
<body>
<h3>File Upload:</h3>
Select a file to upload: <br />
<form action = "UploadServlet" method = "post"
enctype = "multipart/form-data">
<input type = "file" name = "file" size = "50" />
<br />
<input type = "submit" value = "Upload File" />
</form>
</body>
</html>
Dies zeigt das folgende Ergebnis an. Sie können jetzt eine Datei auf dem lokalen PC auswählen. Wenn der Benutzer auf "Datei hochladen" klickt, wird das Formular zusammen mit der ausgewählten Datei gesendet.
File Upload −
Select a file to upload −
NOTE - Das obige Formular ist nur ein Dummy-Formular und würde nicht funktionieren. Sie sollten den obigen Code auf Ihrem Computer ausprobieren, damit es funktioniert.
Schreiben eines Backend-JSP-Skripts
Definieren wir nun einen Speicherort, an dem die hochgeladenen Dateien gespeichert werden. Sie können dies in Ihrem Programm fest codieren, oder dieser Verzeichnisname kann auch mithilfe einer externen Konfiguration wie zcontext-param Element in web.xml wie folgt -
<web-app>
....
<context-param>
<description>Location to store uploaded file</description>
<param-name>file-upload</param-name>
<param-value>
c:\apache-tomcat-5.5.29\webapps\data\
</param-value>
</context-param>
....
</web-app>
Es folgt der Quellcode für UploadFile.jsp. Dies kann das Hochladen mehrerer Dateien gleichzeitig ermöglichen. Betrachten wir nun Folgendes, bevor wir mit dem Hochladen von Dateien fortfahren.
Das folgende Beispiel hängt von ab FileUpload;; Stellen Sie sicher, dass Sie die neueste Version von habencommons-fileupload.x.x.jarDatei in Ihrem Klassenpfad. Sie können es von herunterladenhttps://commons.apache.org/fileupload/.
FileUpload hängt von Commons IO ab. Stellen Sie sicher, dass Sie die neueste Version von habencommons-io-x.x.jarDatei in Ihrem Klassenpfad. Sie können es von herunterladenhttps://commons.apache.org/io/.
Während Sie das folgende Beispiel testen, sollten Sie eine Datei hochladen, die kleiner als maxFileSize ist, da die Datei sonst nicht hochgeladen wird.
Stellen Sie sicher, dass Sie Verzeichnisse erstellt haben c:\temp und c:\apache-tomcat5.5.29\webapps\data weit im Voraus.
<%@ page import = "java.io.*,java.util.*, javax.servlet.*" %>
<%@ page import = "javax.servlet.http.*" %>
<%@ page import = "org.apache.commons.fileupload.*" %>
<%@ page import = "org.apache.commons.fileupload.disk.*" %>
<%@ page import = "org.apache.commons.fileupload.servlet.*" %>
<%@ page import = "org.apache.commons.io.output.*" %>
<%
File file ;
int maxFileSize = 5000 * 1024;
int maxMemSize = 5000 * 1024;
ServletContext context = pageContext.getServletContext();
String filePath = context.getInitParameter("file-upload");
// Verify the content type
String contentType = request.getContentType();
if ((contentType.indexOf("multipart/form-data") >= 0)) {
DiskFileItemFactory factory = new DiskFileItemFactory();
// maximum size that will be stored in memory
factory.setSizeThreshold(maxMemSize);
// Location to save data that is larger than maxMemSize.
factory.setRepository(new File("c:\\temp"));
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// maximum file size to be uploaded.
upload.setSizeMax( maxFileSize );
try {
// Parse the request to get file items.
List fileItems = upload.parseRequest(request);
// Process the uploaded file items
Iterator i = fileItems.iterator();
out.println("<html>");
out.println("<head>");
out.println("<title>JSP File upload</title>");
out.println("</head>");
out.println("<body>");
while ( i.hasNext () ) {
FileItem fi = (FileItem)i.next();
if ( !fi.isFormField () ) {
// Get the uploaded file parameters
String fieldName = fi.getFieldName();
String fileName = fi.getName();
boolean isInMemory = fi.isInMemory();
long sizeInBytes = fi.getSize();
// Write the file
if( fileName.lastIndexOf("\\") >= 0 ) {
file = new File( filePath +
fileName.substring( fileName.lastIndexOf("\\"))) ;
} else {
file = new File( filePath +
fileName.substring(fileName.lastIndexOf("\\")+1)) ;
}
fi.write( file ) ;
out.println("Uploaded Filename: " + filePath +
fileName + "<br>");
}
}
out.println("</body>");
out.println("</html>");
} catch(Exception ex) {
System.out.println(ex);
}
} else {
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet upload</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>No file uploaded</p>");
out.println("</body>");
out.println("</html>");
}
%>
Versuchen Sie nun, Dateien mit dem oben erstellten HTML-Formular hochzuladen. Wenn du es versuchsthttp://localhost:8080/UploadFile.htmwird das folgende Ergebnis angezeigt. Auf diese Weise können Sie Dateien von Ihrem lokalen Computer hochladen.
File Upload −
Select a file to upload −
Wenn Ihr JSP-Skript einwandfrei funktioniert, sollte Ihre Datei in hochgeladen werden c:\apache-tomcat5.5.29\webapps\data\ Verzeichnis.