JSP-tiedoston lataus ja lataus

Tässä esimerkissä opimme tiedoston lähettämisestä ja lataamisesta JSP:n kautta.

Tiedoston syöttö ovat erittäin tärkeitä toimintoja. Täällä aiomme lukea ja kirjoittaa tiedoston JSP:llä.

JSP-tiedoston lataus

  • Voimme ladata mitä tahansa tiedostoja JSP:llä.
  • Se voi olla tekstitiedosto, binääritiedosto, kuvatiedosto tai mikä tahansa muu asiakirja.
  • Tässä tiedoston lataamisen tapauksessa käytetään vain POST-menetelmää, ei GET-menetelmää.
  • Enctype-attribuutiksi tulee asettaa moniosainen/form-data.

Esimerkki: Toiminnon käyttäminen

Tässä esimerkissä lataamme tiedoston IO-objektin avulla

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>

Koodin selitys:

Action_file.jsp

Koodirivit 12-18: Täällä luomme tiedostokentällä varustetun lomakkeen, joka lataa tiedoston palvelimelle ja toiminto välitetään osoitteeseen action_file_upload.jsp

Action_file_upload.jsp

Koodirivi 20: Tässä annamme tiedostopolun tiettyyn polkuun

Koodirivit 23-38: Täällä tarkistamme, onko sisältötyyppi moniosainen/form-data. Jos näin on, sisältö on tiedostotyyppiä ja se luetaan. Kun tiedosto on luettu, se kirjoitetaan väliaikaiseen tiedostoon ja sitten väliaikainen tiedosto muunnetaan päätiedostoksi.

Kun suoritat yllä olevan koodin, saat seuraavan tulosteen

JSP-tiedoston lataus

lähtö:

Lataamme tiedoston käyttämällä Valitse tiedosto -painiketta ja Lataa tiedosto -painike lataa tiedoston palvelimelle annettuun polkuun.

Esimerkki: JSP-toimintojen käyttäminen

Tässä esimerkissä aiomme ladata tiedoston käyttämällä JSP-toimintoja. Otamme lomakkeen, jossa on "lataa"-painike, ja kun napsautat latauspainiketta, tiedosto ladataan.

Lähetetään_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>

Koodin selitys:

Koodirivit 11-12: Tässä otamme lomakkeen, jossa on toiminto servletille guru_upload, joka kulkee POST-menetelmän läpi. Lisäksi tässä enctype eli attribuutti, joka määrittää kuinka lomaketiedot tulee koodata ja lähettää palvelimelle ja sitä käytetään vain POST-menetelmällä. Tässä asetetaan moniosainen/form-data, joka on tiedostoa varten (koska data on suuri).

Koodirivi 13: Tässä määritämme guru_file-elementin tyypin tiedostolla ja annamme kooksi 50.

Koodirivi 15: Tämä on lähetystyypin painike, jonka nimi on "Lataa", jonka kautta toimintoservletti kutsutaan ja pyyntö käsitellään siihen ja tiedosto luetaan ja kirjoitetaan servletiin.

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);
		
		    }


}

Koodin selitys:

Koodirivit 12-14: Täällä meidän on tuotava org.apache.commons-kirjasto koodin kokoonpanoon. Meidän on tuotava fileupload-luokka org.apache.commons-kirjastosta.

Koodirivi 23: Tässä meillä on doPost()-menetelmä, jota kutsutaan, kun välitämme POST-menetelmän JSP:ssä ja se pyytää ja vastaa objekteja parametreinaan

Koodirivi 26: Tässä luomme ServletFileUpload-luokan objektia fileUpload-paketista org.apache.commons-kirjastosta, joka tarkistaa, onko JSP:ssä tiedostoobjekteja. Jos niitä löytyy, ne tiedostoobjektit otetaan pyynnöstä.

Koodirivit 27-32: Toistamme tiedostojen määrän tarkistamalla kuinka monta tiedostokohdetta on moniosaisessa objektissa, joka on listaobjekti (jos lataamme useamman kuin yhden tiedoston) ja tallennamme sen c:/guru/upload-kansioon annetulla tiedostonimellä . Kirjoitamme tiedostoa tiedostoobjektin kirjoitusmenetelmällä mainittuun kansioon.

Koodirivi 34: Jos ei ole poikkeusta, asetamme pyynnöstä attribuutin gurumessage-arvolla "Tiedosto ladattu onnistuneesti".

Koodirivit 35-36: Jos poikkeus tapahtuu, aseta viesti "Tiedoston lataus epäonnistui"

Koodirivi 40: Jos tiedostoa ei löydy, aseta viestiksi "Tiedostoa ei löydy"

Koodirivi 42: Pyynnön edelleenlähetys requestdispatcher-objektilla tulos.jsp-tiedostoon pyyntö- ja vastausobjektien kanssa.

Tulos.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>

Koodin selitys:

Koodirivi 10: Tässä saamme attribuutin pyyntöobjektista, jossa on arvo gurumessage, merkkijonoobjektiksi.

Koodirivi11: Tässä tulostamme tämän viestin.

Kun suoritamme yllä olevan koodin, saamme seuraavan tulosteen

lähtö:

Saamme lomakkeen, jossa on kenttiä tiedoston valitsemiseksi hakemistosta. Kun tiedosto on valittu, meidän on napsautettava latauspainiketta.

Tiedoston lataaminen JSP-toimintojen avulla

Kun latauspainiketta napsautetaan, saamme viestin, että tiedosto on ladattu onnistuneesti.

Tiedoston lataaminen JSP-toimintojen avulla

Alla olevassa kaaviossa näemme, että tiedosto oli ladattu c:/guru/upload-kansioon.

Tiedoston lataaminen JSP-toimintojen avulla

JSP-tiedoston lataus

Tässä esimerkissä aiomme ladata tiedoston hakemistosta napsauttamalla painiketta.

Ladataan_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>

Koodin selitys:

Koodirivi 10: Tässä olemme antaneet linkin tiedoston lataamiseen kansiosta c:/guru/upload servletillä 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
	}

}

Koodin selitys:

Koodirivit 3-5: Tässä tuomme FileInputStreamin, IO Exceptionin ja PrintWriterin java.io-paketista.

Koodirivi 15: Määrittelemme guru_downloada servetti joka laajentaa HttpServlet.

Koodirivi 18: Kuten olemme määrittäneet href, joka sisällytetään URL-osoitteeseen, joten GET-metodi käsitellään (doGet kutsutaan servletissä), joka sisältää myös pyyntö- ja vastausobjektit.

Koodirivit 19-20: Asetamme sisällön Kirjoita vastausobjektiin ja saamme myös kirjoittajaobjektin vastauksesta.

Koodirivit 21-22: Muuttujan määrittäminen gurufile-tiedostoksi arvoksi test.txt ja gurupath muotoon c:/guru/upload/

Koodirivit 23-25: Asetamme sisältötyyppiä käyttämällä vastausobjektia ja käytämme setHeader-metodia, joka asettaa otsikon vastausobjektiin ladatun tiedoston nimeksi.

Koodirivit 27-28: Luomme FileInputStreamia, johon lisäämme gurupath+gurufile.

Koodirivit 31-33: Tässä olemme ottaneet a samalla silmukka joka toimii, kunnes tiedosto on luettu, joten olemme antaneet ehdon muodossa != -1. Tässä tilassa kirjoitamme käyttämällä printwriter-objektia.

Kun suoritat yllä olevan koodin, saat seuraavan tulosteen

lähtö:

Ladataan tiedostoa

lähtö:

Meidän on napsautettava downloading_1.jsp, niin saamme hyperlinkin nimellä "Lataa tästä". Kun napsautat tätä hyperlinkkitiedostoa, se ladataan järjestelmään.

Yhteenveto

  • Olemme oppineet rekisteröintilomakkeen, jolla voit rekisteröityä mihin tahansa hakemukseen
  • Opi lisää sisään- ja uloskirjautumislomakkeen toiminnasta.
  • Opit myös tiedoston lataamisesta JSP:n kautta.