Ladda upp och ladda ner JSP-filer

I det här exemplet ska vi lära oss hur man laddar upp och laddar ner en fil via JSP.

Filinmatning är mycket viktiga operationer. Här ska vi läsa och skriva en fil med JSP.

JSP-filuppladdning

  • Vi kan ladda upp alla filer med JSP.
  • Det kan vara en textfil, binär fil, bildfil eller något annat dokument.
  • Här vid filuppladdning kommer endast POST-metoden att användas och inte GET-metoden.
  • Enctype-attribut ska ställas in på multipart/form-data.

Exempel: Använda Action

I det här exemplet laddar vi upp en fil med hjälp 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>

Förklaring av koden:

Action_file.jsp

Kodrad 12-18: Här skapar vi formulär med filfält, som laddar upp filen till servern och åtgärden skickas till action_file_upload.jsp

Action_file_upload.jsp

Kodrad 20: Här ger vi filsökvägen till en viss sökväg

Kodrad 23-38: Här kontrollerar vi om innehållstypen är multipart/form-data. Om så är fallet är innehållet av filtyp och det läses. Efter att filen har lästs skrivs den in i den temporära filen och sedan konverteras den temporära filen till huvudfilen.

När du kör ovanstående kod får du följande utdata

JSP-filuppladdning

Produktion:

Vi laddar upp filen med alternativet Välj filknapp och ladda upp fil-knappen laddar upp filen till servern till sökvägen som tillhandahålls.

Exempel: Använda JSP-operationer

I det här exemplet ska vi ladda upp en fil med JSP-operationer. Vi kommer att ta ett formulär som kommer att ha "uppladdning"-knappen och när du klickar på uppladdningsknappen kommer filen att laddas upp.

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>

Förklaring av koden:

Kodrad 11-12: Här tar vi ett formulär som har åtgärd på servlet guru_upload som kommer att passera genom en metod POST. Här enctypar vi också dvs attribut som anger hur formulärdata ska kodas och skickas till servern och det används endast med POST-metoden. Här ställer vi in ​​som multipart/form-data som är för filen (eftersom data blir stor).

Kodrad 13: Här anger vi elementet guru_file med typen fil och ger storleken som 50.

Kodrad 15: Detta är en sändningsknapp med namnet "Ladda upp" genom vilken åtgärdsservlet kommer att anropas och begäran kommer att bearbetas till den och filen kommer att läsas och skrivas in 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);
		
		    }


}

Förklaring av koden:

Kodrad 12-14: Här måste vi importera org.apache.commons-biblioteket till konfigurationen av koden. Vi måste importera filuppladdningsklass från org.apache.commons bibliotek.

Kodrad 23: Här har vi doPost()-metoden, som kommer att anropas när vi skickar POST-metoden i JSP och den kommer att begära och svara objekt som dess parametrar

Kodrad 26: Här skapar vi ett objekt av ServletFileUpload-klassen från fileUpload-paketet från org.apache.commons-biblioteket som kommer att kontrollera om det finns några filobjekt i JSP. Om någon hittas kommer dessa filobjekt att tas från begäran.

Kodrad 27-32: Vi upprepar antalet filer genom att kontrollera hur många filobjekt som finns i multiparts-objekt som är ett listobjekt (om vi laddar upp mer än en fil) och sparar det i c:/guru/upload-mappen med det filnamn som har angetts . Vi skriver filen med skrivmetoden för filobjektet till mappen som har nämnts.

Kodrad 34: Om det inte finns något undantag ställer vi in ​​attributet i begäran som gurumesage med värdet "File uploaded successfully".

Kodrad 35-36: Om undantag inträffar, ställ in meddelandet att "Filuppladdning misslyckades"

Kodrad 40: Om filen inte hittas, ställ in meddelandet som "Ingen fil hittades"

Kodrad 42: Vidarebefordra begäran med requestdispatcher-objekt till result.jsp med begäran- och svarsobjekt.

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>

Förklaring av koden:

Kodrad 10: Här får vi attributet från request-objektet med värde gurumessage till ett strängobjekt.

Kodrad 11: Här skriver vi ut meddelandet.

När vi kör ovanstående kod får vi följande utdata

Produktion:

Vi får ett formulär där det finns fält för att välja en fil från katalogen. När filen är vald måste vi klicka på uppladdningsknappen.

Filuppladdning med JSP-operationer

När du klickar på uppladdningsknappen får vi meddelandet att filen har laddats upp.

Filuppladdning med JSP-operationer

I diagrammet nedan kan vi se att filen hade laddats upp i mappen c:/guru/upload.

Filuppladdning med JSP-operationer

Ladda ner JSP-fil

I det här exemplet ska vi ladda ner en fil från en katalog genom att klicka på knappen.

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

Förklaring av koden:

Kodrad 10: Här har vi gett en länk för att ladda ner en fil från mappen c:/guru/upload med 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
	}

}

Förklaring av koden:

Kodrad 3-5: Här importerar vi FileInputStream , IO Exception och PrintWriter från java.io-paketet.

Kodrad 15: Vi definierar guru_download servlett som förlänger HttpServlet.

Kodrad 18: Som vi har definierat en href, som kommer att vara innesluten i URL så kommer GET-metoden att behandlas (doGet kommer att anropas i servlet) som också omsluter förfrågnings- och svarsobjekt.

Kodrad 19-20: Vi ställer in innehåll Skriv in responsobjekt och hämta även writer-objekt från respons.

Kodrad 21-22: Definiera en variabel som gurufil som värde test.txt och gurupath som c:/guru/upload/

Kodrad 23-25: Vi ställer in innehållstypen med responsobjekt och vi använder setHeader-metoden som ställer in header i responsobjektet som filnamnet som har laddats upp.

Kodrad 27-28: Vi skapar FileInputStream där vi lägger till gurupath+gurufile.

Kodrad 31-33: Här har vi tagit en medan slingan som kommer att köras tills filen är läst, därför har vi angett villkoret != -1. I detta tillstånd skriver vi med printwriter-objekt ut.

När du kör ovanstående kod får du följande utdata

Produktion:

Laddar ned fil

Produktion:

Vi måste klicka på downloading_1.jsp så får vi en hyperlänk som "Ladda ner här". När du klickar på den här hyperlänksfilen laddas den ner till systemet.

Sammanfattning

  • Vi har lärt oss om registreringsformulär för att registrera dig i alla applikationer
  • Lärde dig mer om hur inloggnings- och utloggningsformulären fungerar.
  • Lärde mig också om uppladdning och nedladdning av en fil via JSP.