JSP-filopplasting og nedlasting

I dette eksemplet skal vi lære om opplasting og nedlasting av en fil gjennom JSP.

Filinndata er svært viktige operasjoner. Her skal vi lese og skrive en fil ved hjelp av JSP.

JSP-filopplasting

  • Vi kan laste opp alle filer ved hjelp av JSP.
  • Det kan være en tekstfil, binær fil, bildefil eller et hvilket som helst annet dokument.
  • Her ved filopplasting vil kun POST-metoden brukes og ikke GET-metoden.
  • Enctype-attributt bør settes til multipart/form-data.

Eksempel: Bruk av handling

I dette eksemplet laster vi opp en fil ved hjelp av IO-objekt

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>

Forklaring av koden:

Action_file.jsp

Kodelinje 12-18: Her lager vi skjema med filfelt, som vil laste opp filen til serveren og handlingen sendes til action_file_upload.jsp

Action_file_upload.jsp

Kodelinje 20: Her gir vi filbanen til en bestemt bane

Kodelinje 23-38: Her sjekker vi om innholdstypen er multipart/form-data. Hvis det er tilfelle, er innholdet av filtype, og det leses. Etter at filen er lest, blir den skrevet inn i den midlertidige filen, og deretter blir den midlertidige filen konvertert til hovedfilen.

Når du utfører koden ovenfor, får du følgende utgang

JSP-filopplasting

Utgang:

Vi laster opp fil ved å bruke velg filknapp-alternativet og last opp fil-knappen vil laste opp filen til serveren til banen som er gitt.

Eksempel: Bruk av JSP-operasjoner

I dette eksemplet skal vi laste opp en fil ved hjelp av JSP-operasjoner. Vi vil ta et skjema som vil ha "last opp"-knapp og når du klikker på opplastingsknappen vil filen bli lastet opp.

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

Forklaring av koden:

Kodelinje 11-12: Her tar vi et skjema som har handling på servlet guru_upload som vil gå gjennom en metode POST. Også her enctype vi dvs. attributt som spesifiserer hvordan skjemadata skal kodes og sendes til server og det brukes kun med POST-metoden. Her setter vi som multipart/form-data som er for filen (da data vil være store).

Kodelinje 13: Her spesifiserer vi guru_file element med type fil og gir størrelse som 50.

Kodelinje 15: Dette er en innsendingstype-knapp med navnet "Last opp" på den som handlingsservlet vil bli kalt og forespørselen vil behandles til og filen vil bli lest og skrevet inn i servleten.

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


}

Forklaring av koden:

Kodelinje 12-14: Her må vi importere org.apache.commons-biblioteket til konfigurasjonen av koden. Vi må importere filopplastingsklassen fra org.apache.commons-biblioteket.

Kodelinje 23: Her har vi doPost()-metoden, som vil bli kalt når vi sender POST-metoden i JSP, og den vil be om og svare på objekter som parametere

Kodelinje 26: Her lager vi et objekt av ServletFileUpload-klassen fra fileUpload-pakken fra org.apache.commons-biblioteket som vil sjekke om det er noen filobjekter i JSP. Hvis noen blir funnet, vil disse filobjektene bli tatt fra forespørselen.

Kodelinje 27-32: Vi vil iterere antall filer ved å sjekke hvor mange filelementer som finnes i multiparts-objektet som er et listeobjekt (hvis vi laster opp mer enn én fil) og lagre det i c:/guru/upload-mappen med filnavnet som er gitt . Vi skriver filen ved å bruke skrivemetoden til filobjektet inn i mappen som er nevnt.

Kodelinje 34: Hvis det ikke er noe unntak, setter vi attributtet i forespørselen som gurumessage med verdien "File lastet opp".

Kodelinje 35-36: Hvis unntak oppstår, må du angi melding om at "Filopplasting mislyktes"

Kodelinje 40: Hvis filen ikke ble funnet, må du angi meldingen som "Ingen fil funnet"

Kodelinje 42: Videresende forespørsel med requestdispatcher-objekt til result.jsp med forespørsels- og svarobjekter.

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

Forklaring av koden:

Kodelinje 10: Her får vi attributtet fra forespørselsobjektet med verdi gurumessage til et strengobjekt.

Kodelinje 11: Her trykker vi den meldingen.

Når vi kjører koden ovenfor får vi følgende utgang

Utgang:

Vi får et skjema der det er felt for å velge en fil fra katalogen. Når filen er valgt, må vi klikke på opplastingsknappen.

Filopplasting ved hjelp av JSP-operasjoner

Når du klikker på opplastingsknappen, får vi meldingen om at filen er lastet opp.

Filopplasting ved hjelp av JSP-operasjoner

I diagrammet nedenfor kan vi se at filen ble lastet opp i mappen c:/guru/upload.

Filopplasting ved hjelp av JSP-operasjoner

Last ned JSP-fil

I dette eksemplet skal vi laste ned en fil fra en katalog ved å klikke på knappen.

Laster ned_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>

Forklaring av koden:

Kodelinje 10: Her har vi gitt en lenke for å laste ned en fil fra mappen c:/guru/upload ved å bruke 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
	}

}

Forklaring av koden:

Kodelinje 3-5: Her importerer vi FileInputStream , IO Exception og PrintWriter fra java.io-pakken.

Kodelinje 15: Vi definerer guru_download servlett som utvider HttpServlet.

Kodelinje 18: Som vi har definert en href, som vil være omsluttet av URL, så vil GET-metoden bli behandlet (doGet vil bli kalt i servlet) som også omslutter forespørsels- og svarobjekter.

Kodelinje 19-20: Vi setter innhold Skriv inn responsobjekt og få også writer-objekt fra respons.

Kodelinje 21-22: Definere en variabel som gurufil som verdi test.txt og gurupath som c:/guru/upload/

Kodelinje 23-25: Vi setter innholdstypen ved å bruke responsobjekt og vi bruker setHeader-metoden som setter header inn i responsobjektet som filnavnet som er lastet opp.

Kodelinje 27-28: Vi lager FileInputStream der vi vil legge til gurupath+gurufile.

Kodelinje 31-33: Her har vi tatt en mens løkken som vil kjøre til filen er lest, derfor har vi gitt betingelse som != -1. I denne tilstanden skriver vi med printwriter-objekt ut.

Når du utfører koden ovenfor, får du følgende utgang

Utgang:

Laster ned fil

Utgang:

Vi må klikke på downloading_1.jsp vi vil få en hyperkobling som "Last ned her". Når du klikker på denne hyperkoblingsfilen, vil den lastes ned til systemet.

Sammendrag

  • Vi har lært om registreringsskjema for å registrere deg i enhver søknad
  • Lærte mer om hvordan innloggings- og utloggingsskjemaene fungerer.
  • Lærte også om opplasting og nedlasting av en fil gjennom JSP.

Oppsummer dette innlegget med: