Încărcarea și descărcarea fișierului JSP

În acest exemplu, vom învăța despre încărcarea și descărcarea unui fișier prin JSP.

Ieșirea fișierelor de intrare sunt operațiuni foarte importante. Aici vom citi și scrie un fișier folosind JSP.

Î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 obiectul 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

Linia de cod 12-18: Aici creăm un formular cu câmp de fișier, care va încărca fișierul pe server și acțiunea va fi transmisă la action_file_upload.jsp

Action_file_upload.jsp

Linia de cod 20: Aici oferim calea fișierului către o anumită cale

Linia de cod 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ă citirea fișierului, acesta este scris în fișierul temporar și 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

Încărcare fișier JSP

ieșire:

Încărcăm fișierul utilizând opțiunea butonul de alegere a fișierului, iar butonul de încărcare a fișierului va încărca fișierul pe server pe calea furnizată.

Exemplu: Utilizarea operațiunilor JSP

În acest exemplu, vom încărca un fișier utilizând operațiuni JSP. Vom lua un formular care va avea butonul „încărcare” și 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:

Linia de cod 11-12: Aici luăm un formular care are acțiune pe servlet guru_upload care va trece printr-o metodă POST. De asemenea, aici enctype ie attribute care specifică modul în care datele din formular ar trebui să fie codificate și trimise la server și este folosit doar cu metoda POST. Aici setăm ca date multipart/form-data care sunt pentru fișier (deoarece datele vor fi mari).

Linia de cod 13: Aici specificăm elementul guru_file cu tip fișier și dăm dimensiunea 50.

Linia de cod 15: Acesta este un buton de tip de trimitere cu numele „Încărcare” prin care va fi apelată servlet-ul 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:

Linia de cod 12-14: Aici va trebui să importam biblioteca org.apache.commons în configurația codului. Va trebui să importam clasa fileupload din biblioteca org.apache.commons.

Linia de cod 23: Aici avem metoda doPost(), care va fi apelată pe măsură ce trecem metoda POST în JSP și va solicita și obiecte de răspuns ca parametri.

Linia de cod 26: Aici creăm un obiect din clasa ServletFileUpload din pachetul fileUpload din biblioteca org.apache.commons care va verifica dacă există obiecte fișier în JSP. Dacă se găsește vreunul, atunci acele obiecte fișier vor fi preluate din cerere.

Linia de cod 27-32: Vom repeta numărul de fișiere verificând câte elemente de fișier sunt prezente în obiectul cu mai multe părți, care este un obiect listă (dacă încărcăm mai multe fișiere) și îl vom salva în folderul c:/guru/upload cu numele fișierului care a fost furnizat. . Scriem fișierul folosind metoda de scriere a obiectului fișier în folderul care a fost menționat.

Linia de cod 34: Dacă nu există nicio excepție, atunci setăm atributul în cerere ca gurumessage cu valoarea „Fișier încărcat cu succes”.

Linia de cod 35-36: Dacă apare o excepție, setați mesajul „Încărcarea fișierului a eșuat”

Linia de cod 40: Dacă fișierul nu a fost găsit, setați mesajul ca „Niciun fișier găsit”

Linia de cod 42: Redirecționarea cererii utilizând obiectul requestdispatcher către result.jsp cu obiecte cerere și răspuns.

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:

Linia de cod 10: Aici obținem atributul de la obiectul de solicitare cu valoare gurumessage într-un obiect șir.

Linia de cod 11: Aici tipărim acel mesaj.

Când executăm codul de mai sus, obținem următoarea ieșire

ieșire:

Obținem un formular în care există câmpuri pentru a alege un fișier din director. Odată ce fișierul este selectat, trebuie să facem clic pe butonul de încărcare.

Încărcare fișier folosind operațiuni JSP

Odată ce faceți clic pe butonul de încărcare, primim mesajul că fișierul a fost încărcat cu succes.

Încărcare fișier folosind operațiuni JSP

În diagrama de mai jos putem vedea că fișierul a fost încărcat în folderul c:/guru/upload.

Încărcare fișier folosind operațiuni JSP

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:

Linia de cod 10: Aici am oferit un link pentru a descărca un fișier din folderul c:/guru/upload folosind 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
	}

}

Explicația codului:

Linia de cod 3-5: Aici importăm FileInputStream, IO Exception și PrintWriter din pachetul java.io.

Linia de cod 15: Definim guru_download servlet care extinde HttpServlet.

Linia de cod 18: După cum am definit un href, care va fi inclus în URL, astfel încât metoda GET va fi procesată (doGet va fi apelat în servlet) care include și obiecte de cerere și răspuns.

Linia de cod 19-20: Setăm conținutul Tastați obiectul de răspuns și, de asemenea, obținem obiectul writer din răspuns.

Linia de cod 21-22: Definirea unei variabile ca gurufile ca valoare test.txt și gurupath ca c:/guru/upload/

Linia de cod 23-25: Setăm tipul de conținut folosind obiectul de răspuns și folosim metoda setHeader care setează antetul în obiectul de răspuns ca nume de fișier care a fost încărcat.

Linia de cod 27-28: Creăm FileInputStream în care vom adăuga gurupath+gurufile.

Linia de cod 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 ca != -1. În această condiție scriem folosind printwriter object out.

Când executați codul de mai sus, veți obține următoarea ieșire

ieșire:

Se descarcă fișierul

ieșire:

Trebuie să facem clic pe downloading_1.jsp, vom primi un hyperlink ca „Download Here”. Când faceți clic pe acest fișier de hyperlink, acesta va fi descărcat în sistem.

Rezumat

  • Am aflat despre formularul de înregistrare pentru a vă înregistra în orice aplicație
  • Aflați mai multe despre cum funcționează formularele de conectare și de deconectare.
  • De asemenea, ați învățat despre încărcarea și descărcarea unui fișier prin JSP.