Hochladen und Herunterladen von JSP-Dateien

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

Datei-Eingabe-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 die folgende 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: Verwenden von JSP-Operationen

In diesem Beispiel werden wir eine Datei mit JSP-Operationen hochladen. Wir nehmen ein Formular mit einer Schaltfläche „Hochladen“. 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 dem Servlet guru_upload hat, das durch eine POST-Methode geleitet wird. Außerdem verwenden wir hier das Attribut enctype, das angibt, wie Formulardaten kodiert und an den Server gesendet werden sollen, und das nur mit der POST-Methode verwendet wird. Hier legen wir multipart/form-data fest, was für die Datei gilt (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 die folgende 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.

Dateiupload mithilfe von JSP-Operationen

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

Dateiupload mithilfe von JSP-Operationen

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

Dateiupload mithilfe von JSP-Operationen

JSP-Datei herunterladen

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 die folgende 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 etwas über das Hoch- und Herunterladen einer Datei über JSP gelernt.