JSP-fil upload og download

I dette eksempel skal vi lære om upload og download af en fil via JSP.

Filinput output er meget vigtige operationer. Her skal vi læse og skrive en fil ved hjælp af JSP.

JSP fil upload

  • Vi kan uploade alle filer ved hjælp af JSP.
  • Det kan være en tekstfil, binær fil, billedfil eller et hvilket som helst andet dokument.
  • Her i tilfælde af filupload vil kun POST-metoden blive brugt og ikke GET-metoden.
  • Enctype-attribut skal indstilles til multipart/form-data.

Eksempel: Brug af handling

I dette eksempel uploader vi en fil ved hjælp af 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 af koden:

Action_file.jsp

Kodelinje 12-18: Her opretter vi formular med filfelt, som uploader filen til serveren og handlingen vil blive videregivet til action_file_upload.jsp

Action_file_upload.jsp

Kodelinje 20: Her giver vi filstien til en bestemt sti

Kodelinje 23-38: Her tjekker vi om indholdstypen er multipart/form-data. Hvis det er tilfældet, så er indholdet af filtype, og det læses. Efter at filen er læst, skrives den ind i den midlertidige fil, og derefter bliver den midlertidige fil konverteret til hovedfilen.

Når du udfører ovenstående kode, får du følgende output

JSP fil upload

Output:

Vi uploader fil ved at bruge vælg fil-knap-indstillingen, og upload-fil-knappen vil uploade filen til serveren til stien, som er angivet.

Eksempel: Brug af JSP-operationer

I dette eksempel skal vi uploade en fil ved hjælp af JSP-operationer. Vi tager en formular, som vil have "upload"-knap, og når du klikker på upload-knappen, vil filen blive uploadet.

Uploader_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 af koden:

Kodelinje 11-12: Her tager vi en formular, som har handling på servlet guru_upload, som vil passere gennem en metode POST. Her enctype vi også, dvs. attribut, som specificerer, hvordan formulardata skal kodes og sendes til serveren, og det bruges kun med POST-metoden. Her sætter vi som multipart/form-data, som er for filen (da data vil være store).

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

Kodelinje 15: Dette er en submit type-knap med navnet "Upload" på den, gennem hvilken handlingsservlet vil blive kaldt, og anmodningen vil blive behandlet til den, og filen vil blive læst og skrevet ind 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 af koden:

Kodelinje 12-14: Her bliver vi nødt til at importere org.apache.commons-biblioteket til konfigurationen af ​​koden. Vi bliver nødt til at importere filupload-klassen fra org.apache.commons-biblioteket.

Kodelinje 23: Her har vi doPost()-metoden, som vil blive kaldt, når vi sender POST-metoden i JSP, og den vil anmode om og svare på objekter som dens parametre

Kodelinje 26: Her opretter vi et objekt af ServletFileUpload-klassen fra fileUpload-pakken fra org.apache.commons-biblioteket, som vil kontrollere, om der er nogen filobjekter i JSP. Hvis der findes nogen, vil disse filobjekter blive taget fra anmodningen.

Kodelinje 27-32: Vi gentager antallet af filer ved at kontrollere, hvor mange filelementer der er til stede i multiparts-objekt, som er et listeobjekt (hvis vi uploader mere end én fil) og gemmer det i c:/guru/upload-mappen med det filnavn, der er angivet . Vi skriver filen ved at bruge skrivemetoden for filobjektet til den mappe, der er blevet nævnt.

Kodelinje 34: Hvis der ikke er nogen undtagelse, indstiller vi attributten i anmodningen som gurumessage med værdien "Fil uploadet med succes".

Kodelinje 35-36: Hvis der opstår en undtagelse, skal du indstille meddelelsen "File upload mislykkedes"

Kodelinje 40: Hvis filen ikke findes, skal du indstille beskeden som "Ingen fil fundet"

Kodelinje 42: Videresendelse af anmodning ved hjælp af requestdispatcher-objekt til result.jsp med anmodnings- 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 af koden:

Kodelinje 10: Her får vi attributten fra anmodningsobjektet med værdi gurumessage til et strengobjekt.

Kodelinje 11: Her udskriver vi den besked.

Når vi udfører ovenstående kode får vi følgende output

Output:

Vi får en formular, hvori der er felter til at vælge en fil fra mappen. Når filen er valgt, skal vi klikke på upload-knappen.

Filoverførsel ved hjælp af JSP-operationer

Når du klikker på upload-knappen, får vi beskeden om, at filen er uploadet.

Filoverførsel ved hjælp af JSP-operationer

I nedenstående diagram kan vi se, at filen var blevet uploadet i mappen c:/guru/upload.

Filoverførsel ved hjælp af JSP-operationer

Download JSP fil

I dette eksempel skal vi downloade en fil fra en mappe ved at klikke på knappen.

Downloader_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 af koden:

Kodelinje 10: Her har vi givet et link til at downloade en fil fra mappen c:/guru/upload ved hjælp af 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 af koden:

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

Kodelinje 15: Vi definerer guru_download servlet som udvider HttpServlet.

Kodelinje 18: Som vi har defineret en href, som vil være indesluttet i URL, så vil GET-metoden blive behandlet (doGet vil blive kaldt i servlet), som også omslutter anmodnings- og svarobjekter.

Kodelinje 19-20: Vi sætter indhold Indtast svarobjekt og få også skribentobjekt fra svar.

Kodelinje 21-22: Definition af en variabel som gurufil som værdi test.txt og gurupath som c:/guru/upload/

Kodelinje 23-25: Vi indstiller indholdstypen ved hjælp af responsobjekt, og vi bruger setHeader-metoden, som sætter header i svarobjektet som det filnavn, der er blevet uploadet.

Kodelinje 27-28: Vi opretter FileInputStream, hvor vi tilføjer gurupath+gurufile.

Kodelinje 31-33: Her har vi taget en mens løkke som vil køre indtil filen er læst, derfor har vi givet betingelse som != -1. I denne tilstand skriver vi ved hjælp af printwriter-objekt ud.

Når du udfører ovenstående kode, får du følgende output

Output:

Downloader fil

Output:

Vi skal klikke på downloading_1.jsp, så får vi et hyperlink som "Download her". Når du klikker på denne hyperlinkfil, downloades den til systemet.

Resumé

  • Vi har lært om registreringsformularen til at registrere i enhver ansøgning
  • Lærte mere om, hvordan login- og logoutformularerne fungerer.
  • Lærte også om upload og download af en fil gennem JSP.