Caricamento e download di file JSP
In questo esempio, impareremo come caricare e scaricare un file tramite JSP.
File Input output sono operazioni molto importanti. Qui leggeremo e scriveremo un file utilizzando JSP.
Caricamento file JSP
- Possiamo caricare qualsiasi file utilizzando JSP.
- Può essere un file di testo, un file binario, un file di immagine o qualsiasi altro documento.
- In caso di caricamento di file verrà utilizzato solo il metodo POST e non il metodo GET.
- L'attributo Enctype deve essere impostato su multipart/form-data.
Esempio: utilizzo dell'azione
In questo esempio, stiamo caricando un file utilizzando l'oggetto IO
File_azione.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>
Spiegazione del codice:
File_azione.jsp
Riga di codice 12-18: Qui stiamo creando un modulo con il campo file, che caricherà il file sul server e l'azione verrà passata a action_file_upload.jsp
Action_file_upload.jsp
Riga di codice 20: Qui stiamo assegnando il percorso del file a un percorso particolare
Riga di codice 23-38: Qui controlliamo se il tipo di contenuto è multipart/form-data. In tal caso, il contenuto è di tipo file e viene letto. Dopo la lettura del file, viene scritto nel file temporaneo e quindi il file temporaneo viene convertito nel file principale.
Quando esegui il codice sopra, ottieni il seguente output
Produzione:
Stiamo caricando il file utilizzando l'opzione del pulsante Scegli file e il pulsante Carica file caricherà il file sul server nel percorso fornito.
Esempio: utilizzo delle operazioni JSP
In questo esempio, caricheremo un file usando le operazioni JSP. Prenderemo un modulo che avrà il pulsante "upload" e quando cliccherai sul pulsante upload, il file verrà caricato.
Caricamento_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>
Spiegazione del codice:
Riga di codice 11-12: Qui stiamo prendendo un modulo che ha un'azione sul servlet guru_upload che passerà attraverso un metodo POST. Inoltre, qui enctype ie attributo che specifica come i dati del modulo devono essere codificati e inviati al server e viene utilizzato solo con il metodo POST. Qui stiamo impostando come multipart/form-data che è per il file (poiché i dati saranno grandi).
Riga di codice 13: Qui stiamo specificando l'elemento guru_file con il tipo file e specificando la dimensione come 50.
Riga di codice 15: Questo è un pulsante di tipo invio con il nome "Carica" attraverso il quale verrà chiamato il servlet di azione e la richiesta verrà elaborata in esso e il file verrà letto e scritto nel servlet.
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); } }
Spiegazione del codice:
Riga di codice 12-14: Qui dovremo importare la libreria org.apache.commons nella configurazione del codice. Dovremo importare la classe fileupload dalla libreria org.apache.commons.
Riga di codice 23: Qui abbiamo il metodo doPost(), che verrà chiamato mentre stiamo passando il metodo POST in JSP e richiederà e risponderà oggetti come parametri
Riga di codice 26: Qui stiamo creando un oggetto della classe ServletFileUpload dal pacchetto fileUpload dalla libreria org.apache.commons che controllerà se ci sono oggetti file in JSP. Se ne viene trovato qualcuno, l'oggetto file verrà preso dalla richiesta.
Riga di codice 27-32: Itereremo il numero di file controllando quanti elementi file sono presenti nell'oggetto multiparts che è un oggetto elenco (se carichiamo più di un file) e lo salveremo nella cartella c:/guru/upload con il nome file che è stato fornito . Stiamo scrivendo il file utilizzando il metodo di scrittura del fileobject nella cartella menzionata.
Riga di codice 34: Se non ci sono eccezioni, impostiamo l'attributo nella richiesta come gurumessage con il valore "File caricato con successo".
Riga di codice 35-36: Se si verifica un'eccezione, impostare il messaggio "Caricamento file non riuscito"
Riga di codice 40: Se il file non viene trovato, impostare il messaggio come "Nessun file trovato"
Riga di codice 42: Inoltro della richiesta utilizzando l'oggetto requestdispatcher a result.jsp con oggetti richiesta e risposta.
Risultato.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>
Spiegazione del codice:
Riga di codice 10: Qui stiamo ottenendo l'attributo dall'oggetto richiesta con valore gurumessage in un oggetto stringa.
Riga codice11: Qui stiamo stampando quel messaggio.
Quando eseguiamo il codice sopra otteniamo il seguente output
Produzione:
Otteniamo un modulo in cui sono presenti campi per scegliere un file dalla directory. Una volta selezionato il file, dobbiamo fare clic sul pulsante di caricamento.
Dopo aver fatto clic sul pulsante di caricamento, riceviamo il messaggio che il file è stato caricato correttamente.
Nel diagramma seguente possiamo vedere che il file è stato caricato nella cartella c:/guru/upload.
Scarica file JSP
In questo esempio, scaricheremo un file da una directory facendo clic sul pulsante.
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>
Spiegazione del codice:
Riga di codice 10: Qui abbiamo fornito il collegamento per scaricare un file dalla cartella c:/guru/upload utilizzando il servlet guru_download .
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 } }
Spiegazione del codice:
Riga di codice 3-5: Qui stiamo importando FileInputStream , IO Exception e PrintWriter dal pacchetto java.io.
Riga di codice 15: Stiamo definendo guru_download servlet che estende HttpServlet.
Riga di codice 18: Poiché abbiamo definito un href, che sarà racchiuso nell'URL in modo che il metodo GET venga elaborato (doGet verrà chiamato nel servlet) che racchiude anche gli oggetti di richiesta e risposta.
Riga di codice 19-20: Stiamo impostando il contenuto. Digita l'oggetto della risposta e ottieni anche l'oggetto dello scrittore dalla risposta.
Riga di codice 21-22: Definizione di una variabile come gurufile come valore test.txt e gurupath come c:/guru/upload/
Riga di codice 23-25: Stiamo impostando il tipo di contenuto utilizzando l'oggetto risposta e utilizziamo il metodo setHeader che imposta l'intestazione nell'oggetto risposta come nome file che è stato caricato.
Riga di codice 27-28: Stiamo creando FileInputStream in cui aggiungeremo gurupath+gurufile.
Riga di codice 31-33: Qui abbiamo preso a mentre il ciclo che verrà eseguito finché il file non viene letto, quindi abbiamo dato la condizione come != -1. In questa condizione stiamo scrivendo utilizzando l'oggetto printwriter out.
Quando esegui il codice soprastante otterrai il seguente output
Produzione:
Produzione:
Dobbiamo fare clic su downloading_1.jsp otterremo un collegamento ipertestuale come "Scarica qui". Quando si fa clic su questo file del collegamento ipertestuale, verrà scaricato nel sistema.
Sommario
- Abbiamo appreso del modulo di registrazione per registrarsi in qualsiasi applicazione
- Ulteriori informazioni su come funzionano i moduli di accesso e disconnessione.
- Ho anche imparato come caricare e scaricare un file tramite JSP.