Beispiele für JSP-Datei-Upload- und Datei-Download-Programme

In diesem Beispiel lernen wir das Hoch- und Herunterladen einer Datei über JSP.

Dateieingabe und Ausgabe sind sehr wichtige Vorgänge. Hier werden wir eine Datei mit JSP lesen und schreiben.

JSP-Datei-Upload

  • Wir können beliebige Dateien mit JSP hochladen.
  • Es kann eine Textdatei, eine Binärdatei, eine Bilddatei oder ein beliebiges anderes Dokument sein.
  • Hier wird beim Hochladen von Dateien nur die POST-Methode und nicht die GET-Methode verwendet.
  • Das Enctype-Attribut sollte auf multipart/form-data gesetzt sein.

Beispiel: Aktion verwenden

In diesem Beispiel laden wir eine Datei mithilfe eines IO-Objekts hoch

Action_file.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Guru File</title>
</head>
<body>
<a>Guru File Upload:</a>
Select file: <br />
<form action="action_file_upload.jsp" method="post"
                        enctype="multipart/form-data">
<input type="file" name="file" size="50" />
<br />
<input type="submit" value="Upload File" />
</form>
</body>
</html>

Action_file_upload.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
    <%@ 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.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Guru File Upload</title>
</head>
<body>
<%
   File file ;
   int maxFileSize = 5000 * 1024;
   int maxMemSize = 5000 * 1024;
   String filePath = "E:/guru99/data";

   String contentType = request.getContentType();
   if ((contentType.indexOf("multipart/form-data") >= 0)) {

      DiskFileItemFactory factory = new DiskFileItemFactory();
      factory.setSizeThreshold(maxMemSize);
      factory.setRepository(new File("c:\\temp"));
      ServletFileUpload upload = new ServletFileUpload(factory);
      upload.setSizeMax( maxFileSize );
      try{ 
         List fileItems = upload.parseRequest(request);
         Iterator i = fileItems.iterator();
         out.println("<html>");
         out.println("<body>");
         while ( i.hasNext () ) 
         {
            FileItem fi = (FileItem)i.next();
            if ( !fi.isFormField () )  {
                String fieldName = fi.getFieldName();
                String fileName = fi.getName();
                boolean isInMemory = fi.isInMemory();
                long sizeInBytes = fi.getSize();
                file = new File( filePath + "yourFileName") ;
                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("<body>");
      out.println("<p>No file uploaded</p>"); 
      out.println("</body>");
      out.println("</html>");
   }
%>
</body>
</html>

Erklärung des Codes:

Action_file.jsp

Codezeile 12-18: Hier erstellen wir ein Formular mit einem Dateifeld, das die Datei auf den Server hochlädt und die Aktion an action_file_upload.jsp weiterleitet

Action_file_upload.jsp

Codezeile 20: Hier geben wir den Dateipfad einem bestimmten Pfad an

Codezeile 23-38: Hier prüfen wir, ob der Inhaltstyp multipart/form-data ist. Wenn dies der Fall ist, handelt es sich um einen Dateityp, der gelesen wird. Nachdem die Datei gelesen wurde, wird sie in die temporäre Datei geschrieben und anschließend wird die temporäre Datei in die Hauptdatei konvertiert.

Wenn Sie den obigen Code ausführen, erhalten Sie Folgendeswing Ausgabe

JSP-Datei-Upload

Ausgang:

Wir laden die Datei über die Schaltfläche „Datei auswählen“ hoch und die Schaltfläche „Datei hochladen“ lädt die Datei auf den Server unter dem angegebenen Pfad hoch.

Beispiel: Verwendung von JSP-Operationen

In diesem Beispiel werden wir eine Datei mithilfe von JSP-Operationen hochladen.

Wir werden ein Formular mit der Schaltfläche „Hochladen“ erstellen. Wenn Sie auf die Schaltfläche „Hochladen“ klicken, wird die Datei hochgeladen.

Upload_1.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Guru Uploading File</title>
</head>
<body>
File: <br />
<form action="guru_upload" method="post"
                        enctype="multipart/form-data">
<input type="file" name="guru_file" size="50" />
<br />
<input type="submit" value="Upload" />
</form>
</body>
</html>

Erklärung des Codes:

Codezeile 11-12: Hier nehmen wir ein Formular, das eine Aktion auf das Servlet guru_upload ausführt, das eine Methode POST durchläuft. Außerdem verschlüsseln wir hier ein Attribut, das angibt, wie Formulardaten codiert und an den Server gesendet werden sollen. Es wird nur mit der POST-Methode verwendet. Hier legen wir Multipart-/Formulardaten für die Datei fest (da die Daten groß sein werden).

Codezeile 13: Hier geben wir das guru_file-Element mit dem Typ file an und geben die Größe als 50 an.

Codezeile 15: Dabei handelt es sich um eine Schaltfläche vom Typ „Senden“ mit dem Namen „Hochladen“, über die das Aktionsservlet aufgerufen und die Anforderung darin verarbeitet wird und die Datei in das Servlet gelesen und geschrieben wird.

Guru_upload.java

package demotest;

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class guru_upload extends HttpServlet {
	private static final long serialVersionUID = 1L;
 
    public guru_upload() {
        super();
        // TODO Auto-generated constructor stub
    }
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		        if(ServletFileUpload.isMultipartContent(request)){
		            try {
		                List <FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
		                for(FileItem item : multiparts){
		                    if(!item.isFormField()){
		                        String name = new File(item.getName()).getName();
		                        item.write( new File("c:/guru/upload" + File.separator + name));
		                    }
		                }
		               //File uploaded successfully
		               request.setAttribute("gurumessage", "File Uploaded Successfully");
		            } catch (Exception ex) {
		               request.setAttribute("gurumessage", "File Upload Failed due to " + ex);
		            }         		
		        }else{
		
		            request.setAttribute("gurumessage","No File found");
 }
		        request.getRequestDispatcher("/result.jsp").forward(request, response);
		
		    }


}

Erklärung des Codes:

Codezeile 12-14: Hier müssen wir die Bibliothek org.apache.commons in die Konfiguration des Codes importieren. Wir müssen die Dateiupload-Klasse aus der Bibliothek org.apache.commons importieren.

Codezeile 23: Hier haben wir die Methode doPost(), die aufgerufen wird, wenn wir die POST-Methode in JSP übergeben, und Objekte als Parameter anfordert und antwortet

Codezeile 26: Hier erstellen wir ein Objekt der Klasse ServletFileUpload aus dem Paket fileUpload aus der Bibliothek org.apache.commons, das prüft, ob in JSP Dateiobjekte vorhanden sind. Wenn welche gefunden werden, werden diese Dateiobjekte aus der Anfrage übernommen.

Codezeile 27-32: Wir werden die Anzahl der Dateien iterieren, indem wir prüfen, wie viele Dateielemente im Multiparts-Objekt vorhanden sind, das ein Listenobjekt ist (wenn wir mehr als eine Datei hochladen), und es im Ordner c:/guru/upload mit dem angegebenen Dateinamen speichern . Wir schreiben die Datei mit der Schreibmethode des Dateiobjekts in den genannten Ordner.

Codezeile 34: Wenn es keine Ausnahme gibt, legen wir das Attribut in der Anfrage als Gurumessage mit dem Wert „Datei erfolgreich hochgeladen“ fest.

Codezeile 35-36: Wenn eine Ausnahme auftritt, wird die Meldung „Datei-Upload fehlgeschlagen“ eingestellt.

Codezeile 40: Wenn die Datei nicht gefunden wird, wird die Meldung als „Keine Datei gefunden“ eingestellt.

Codezeile 42: Weiterleitung der Anfrage mithilfe des Requestdispatcher-Objekts an result.jsp mit Anfrage- und Antwortobjekten.

Ergebnis.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Guru Result</title>
</head>
<body>
<% String msg = (String)request.getAttribute("message");
   out.println(msg);
%>
</body>
</html>

Erklärung des Codes:

Codezeile 10: Hier erhalten wir das Attribut vom Anforderungsobjekt mit dem Wert gurumessage in ein String-Objekt.

Codezeile11: Hier drucken wir diese Nachricht aus.

Wenn wir den obigen Code ausführen, erhalten wir Folgendeswing Ausgabe

Ausgang:

Wir erhalten ein Formular, in dem es Felder gibt, um eine Datei aus einem Verzeichnis auszuwählen. Sobald die Datei ausgewählt ist, müssen wir auf die Schaltfläche „Hochladen“ klicken.

Datei-Upload mithilfe von JSP-Operationen

Sobald Sie auf die Schaltfläche „Hochladen“ klicken, erhalten Sie die Meldung, dass die Datei erfolgreich hochgeladen wurde.

Datei-Upload mithilfe von JSP-Operationen

Im folgenden Diagramm können wir sehen, dass die Datei in den Ordner c:/guru/upload hochgeladen wurde.

Datei-Upload mithilfe von JSP-Operationen

Datei wird heruntergeladen

In diesem Beispiel laden wir eine Datei aus einem Verzeichnis herunter, indem wir auf die Schaltfläche klicken.

Download_1.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Downloading Guru Example</title>
</head>
<body>
Guru Downloading File<a href="guru_download">Download here!!!</a>
</body>
</html>

Erklärung des Codes:

Codezeile 10: Hier haben wir einen Link zum Herunterladen einer Datei aus dem Ordner c:/guru/upload mit dem Servlet guru_download angegeben.

Guru_download.java

package demotest;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class guru_download
 */
public class guru_download extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");
		PrintWriter out = response.getWriter();
		String gurufile = "test.txt";
		String gurupath = "c:/guru/upload/";
		response.setContentType("APPLICATION/OCTET-STREAM");
		response.setHeader("Content-Disposition", "attachment; filename=\""
				+ gurufile + "\"");
 
		FileInputStream fileInputStream = new FileInputStream(gurupath
				+ gurufile);
 
		int i;
		while ((i = fileInputStream.read()) != -1) {
			out.write(i);
		}
		fileInputStream.close();
		out.close();
	}


	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

}

Erklärung des Codes:

Codezeile 3-5: Hier importieren wir FileInputStream, IO Exception und PrintWriter aus dem java.io-Paket.

Codezeile 15: Wir definieren guru_download Servlet was HttpServlet erweitert.

Codezeile 18: Da wir eine href definiert haben, die in die URL eingeschlossen wird, wird die GET-Methode verarbeitet (doGet wird im Servlet aufgerufen), die auch Anforderungs- und Antwortobjekte einschließt.

Codezeile 19-20: Wir legen den Inhalt fest. Geben Sie das Antwortobjekt ein und rufen Sie auch das Writer-Objekt aus der Antwort ab.

Codezeile 21-22: Definieren einer Variablen als Gurufile als Wert test.txt und Gurupath als c:/guru/upload/

Codezeile 23-25: Wir legen den Inhaltstyp mithilfe des Antwortobjekts fest und verwenden die Methode setHeader, die den Header als hochgeladenen Dateinamen in das Antwortobjekt einfügt.

Codezeile 27-28: Wir erstellen FileInputStream, in dem wir gurupath+gurufile hinzufügen.

Codezeile 31-33: Hier haben wir eine genommen while-Schleife Dies wird ausgeführt, bis die Datei gelesen ist. Daher haben wir die Bedingung != -1 angegeben. In diesem Zustand schreiben wir mit dem Printwriter-Objekt.

Wenn Sie den obigen Code ausführen, erhalten Sie Folgendeswing Ausgabe

Ausgang:

Datei wird heruntergeladen

Ausgang:

Wir müssen auf downloading_1.jsp klicken, wir erhalten einen Hyperlink mit der Bezeichnung „Hier herunterladen“. Wenn Sie auf diese Hyperlink-Datei klicken, wird sie in das System heruntergeladen.

Zusammenfassung

  • Wir haben das Registrierungsformular kennengelernt, mit dem wir uns für jede Anwendung registrieren können
  • Erfahren Sie mehr darüber, wie die Anmelde- und Abmeldeformulare funktionieren.
  • Außerdem habe ich gelernt, wie man eine Datei hoch- und herunterlädt JSP.