Încărcarea și descărcarea fișierului JSP
⚡ Rezumat inteligent
Încărcarea și descărcarea fișierelor JSP sunt operațiuni de bază de intrare și ieșire care permit unei aplicații web să primească fișiere de la utilizatori și să le livreze fișiere înapoi. Această resursă explică ambele fluxuri folosind formulare de acțiune JSP, Apache Commons FileUpload și clase servlet, cu cod funcțional complet.

Încărcare fișier JSP
- Putem încărca orice fișier folosind JSP.
- Poate fi un fișier text, fișier binar, fișier imagine sau orice alt document.
- Aici, în cazul încărcării fișierului, va fi folosită numai metoda POST și nu metoda GET.
- Atributul Enctype trebuie setat la multipart/form-data.
Exemplu: Utilizarea Acțiunii
În acest exemplu, încărcăm un fișier folosind un obiect IO.
Fișier_acțiune.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>
Explicația codului:
Fișier_acțiune.jsp
Code Linia 12-18: Aici creăm un formular cu un câmp de fișier, care va încărca un fișier pe server, iar acțiunea va fi transmisă către action_file_upload.jsp.
Action_file_upload.jsp
Code Linia 20: Aici oferim calea fișierului către o anumită cale.
Code Linia 23-38: Aici verificăm dacă tipul de conținut este multipart/form-data. Dacă acesta este cazul, atunci conținutul este de tip fișier și este citit. După ce fișierul este citit, acesta este scris în fișierul temporar, iar apoi fișierul temporar este convertit în fișierul principal.
Când executați codul de mai sus, obțineți următoarea ieșire:
ieșire:
Încărcăm un fișier folosind opțiunea butonului „Alege fișier”, iar butonul „Încărcare fișier” va încărca fișierul pe server, în calea furnizată.
Exemplu: Utilizarea operațiunilor JSP
În acest exemplu, vom încărca un fișier folosind operații JSP. Vom lua un formular care va avea un buton „încărcare”, iar când faceți clic pe butonul de încărcare, fișierul va fi încărcat.
Încărcare_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>
Explicația codului:
Code Linia 11-12: Aici luăm un formular care are o acțiune asupra servletului guru_upload, care va trece printr-o metodă POST. De asemenea, aici atributul enctype specifică modul în care datele formularului ar trebui codificate și trimise către server și este utilizat doar cu metoda POST. Aici îl setăm ca multipart/form-data, care este pentru fișier (deoarece datele vor fi mari).
Code Linia 13: Aici specificăm elementul guru_file cu tipul file și dăm dimensiunea 50.
Code Linia 15: Acesta este un buton de tip trimitere cu numele „Încărcare”, prin care va fi apelat servletul de acțiune și cererea va fi procesată în acesta, iar fișierul va fi citit și scris în 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); } }
Explicația codului:
Code Linia 12-14: Aici va trebui să importăm biblioteca org.apache.commons în configurația codului. Va trebui să importăm clasa fileupload din biblioteca org.apache.commons.
Code Linia 23: Aici avem metoda doPost(), care va fi apelată pe măsură ce transmitem metoda POST în JSP și va lua ca parametri obiecte de tip request și response.
Code Linia 26: Aici creăm un obiect al clasei ServletFileUpload din pachetul fileUpload al bibliotecii org.apache.commons, care va verifica dacă există obiecte fișier în JSP. Dacă se găsesc, atunci acele obiecte fișier vor fi preluate din cerere.
Code Linia 27-32: Vom itera peste numărul de fișiere verificând câte elemente de fișier sunt prezente în obiectul multiparts, care este un obiect listă (dacă încărcăm mai multe fișiere) și îl vom salva în folderul c:/guru/upload cu numele de fișier furnizat. Scriem fișierul folosind metoda de scriere a obiectului fișier în folderul menționat.
Code Linia 34: Dacă nu există nicio excepție, atunci setăm un atribut în cerere ca gurumessage cu valoarea „Fișier încărcat cu succes”.
Code Linia 35-36: Dacă apare o excepție, setăm un mesaj care spune „Încărcarea fișierului a eșuat”.
Code Linia 40: Dacă fișierul nu este găsit, setăm mesajul „Niciun fișier găsit”.
Code Linia 42: Redirecționarea cererii folosind obiectul requestdispatcher către result.jsp cu obiecte request și response.
Rezultat.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>
Explicația codului:
Code Linia 10: Aici obținem atributul de la obiectul request cu valoarea gurumessage într-un obiect de tip șir de caractere.
Code Linia 11: Aici tipărim acel mesaj.
Când executăm codul de mai sus, obținem următoarea ieșire:
ieșire:
Primim un formular în care există câmpuri pentru a alege un fișier din director. După ce fișierul este selectat, trebuie să facem clic pe butonul de încărcare.
După ce apăsăm butonul de încărcare, primim mesajul că fișierul a fost încărcat cu succes.
În diagrama de mai jos, putem vedea că fișierul a fost încărcat în folderul c:/guru/upload.
Descărcare fișier JSP
În acest exemplu, vom descărca un fișier dintr-un director făcând clic pe butonul.
Descărcare_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>
Explicația codului:
Code Linia 10: Aici am oferit un link pentru a descărca un fișier din folderul c:/guru/upload folosind servletul 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 } }
Explicația codului:
Code Linia 3-5: Aici importăm FileInputStream, IOException și Print.Writer din pachetul java.io.
Code Linia 15: Definim fișierul guru_download servlet care extinde HttpServlet.
Code Linia 18: Așa cum am definit, un href, care va fi inclus într-un URL, deci metoda GET va fi procesată (doGet va fi apelată în servlet), care include și obiecte de tip cerere și răspuns.
Code Linia 19-20: Setăm tipul de conținut în obiectul de răspuns și obținem și obiectul writer din răspuns.
Code Linia 21-22: Definirea unei variabile ca gurufile cu valoarea test.txt și gurupath ca c:/guru/upload/.
Code Linia 23-25: Setăm tipul de conținut folosind obiectul response și folosim metoda setHeader, care setează antetul în obiectul response ca nume de fișier care a fost încărcat.
Code Linia 27-28: Creăm un fișier FileInputStream în care vom adăuga gurupath+gurufile.
Code Linia 31-33: Aici am luat o în timp ce bucla care va rula până când fișierul este citit, prin urmare am dat condiția != -1. În această condiție, scriem folosind obiectul printwriter.
Când executați codul de mai sus, veți obține următorul rezultat:
ieșire:
Trebuie să facem clic pe downloading_1.jsp și vom primi un hyperlink de tipul „Descărcați aici”. Când faceți clic pe acest fișier hyperlink, acesta va fi descărcat în sistem.





