Ladda upp och ladda ner JSP-filer

⚡ Smart sammanfattning

JSP-filuppladdning och -nedladdning är centrala in- och utdataoperationer som låter en webbapplikation ta emot filer från användare och skicka filer tillbaka till dem. Den här resursen förklarar båda flödena med hjälp av JSP-åtgärdsformulär, Apache Commons FileUpload och servletklasser, med fullständig fungerande kod.

  • 📤 Grunderna för uppladdning: Använd POST-metoden och sätt enctype till multipart/form-data för alla filuppladdningar.
  • 🧩 Apache Commons: DiskFileItemFactory och ServletFileUpload tolkar flerpartsbegäran till filobjekt.
  • 🗂️ Servlethantering: doPost-metoden itererar filobjekt och skriver vart och ett till en målmapp.
  • 📥 Nedladdningsflöde: En servlet strömmar en fil med hjälp av FileInputStream och Content-Disposition-headern.
  • ⚙️ konfiguration: Filsökvägar, storleksgränser och innehållstyp måste ställas in innan läsning eller skrivning.

Ladda upp och ladda ner JSP-filer

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

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

Code Rad 12-18: Här skapar vi ett formulär med ett filfält, som laddar upp en fil till servern, och åtgärden skickas till action_file_upload.jsp.

Action_file_upload.jsp

Code Linje 20: Här anger vi filsökvägen till en specifik sökväg.

Code Rad 23-38: Här kontrollerar vi om innehållstypen är multipart/form-data. Om så är fallet är innehållet av filtypen och det läses. Efter att filen har lästs skrivs den till 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 en fil med hjälp av alternativet "välj fil", och knappen "uppladda fil" laddar upp filen till servern till den angivna sökvägen.

Exempel: Använda JSP-operationer

I det här exemplet ska vi ladda upp en fil med hjälp av JSP-operationer. Vi använder ett formulär som har en "uppladdningsknapp", och när du klickar på uppladdningsknappen laddas filen 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:

Code Rad 11-12: Här tar vi ett formulär som har en åtgärd på servleten guru_upload, som kommer att passera genom en POST-metod. Attributet enctype anger också här hur formulärdata ska kodas och skickas till servern, och det används endast med POST-metoden. Här ställer vi in ​​det som multipart/form-data, vilket är för filen (eftersom datamängden kommer att vara stor).

Code Linje 13: Här anger vi guru_file-elementet med typen file och anger storleken 50.

Code Linje 15: Detta är en knapp av typen "Skicka" med namnet "Ladda upp", genom vilken åtgärdsservleten anropas och begäran bearbetas till den, och filen läses och skrivs till 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:

Code Rad 12-14: Här måste vi importera org.apache.commons-biblioteket till koden. Vi måste importera fileupload-klassen från org.apache.commons-biblioteket.

Code Linje 23: Här har vi doPost()-metoden, som kommer att anropas när vi skickar POST-metoden i JSP, och den kommer att ta request- och response-objekt som sina parametrar.

Code Linje 26: Här skapar vi ett objekt i ServletFileUpload-klassen från fileUpload-paketet i org.apache.commons-biblioteket, vilket kontrollerar om det finns några filobjekt i JSP. Om några hittas kommer dessa filobjekt att hämtas från begäran.

Code Rad 27-32: Vi kommer att iterera över antalet filer genom att kontrollera hur många filelement som finns i multipartsobjektet, vilket är ett listobjekt (om vi laddar upp mer än en fil), och spara det i mappen c:/guru/upload med det angivna filnamnet. Vi skriver filen med hjälp av write-metoden för filobjektet till mappen som har nämnts.

Code Linje 34: Om det inte finns något undantag, så ställer vi in ​​ett attribut i förfrågan som gurumessage med värdet "Filen laddades upp framgångsrikt".

Code Rad 35-36: Om ett undantag inträffar visas meddelandet ”Filuppladdning misslyckades”.

Code Linje 40: Om filen inte hittas ställer vi in ​​meddelandet som "Ingen fil hittad".

Code Linje 42: Vidarebefordrar begäran med hjälp av requestdispatcher-objektet till result.jsp med request- och response-objekten.

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:

Code Linje 10: Här hämtar vi attributet från request-objektet med värdet gurumessage till ett strängobjekt.

Code Linje 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 upp 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 vi klickar på uppladdningsknappen får vi meddelandet att filen har laddats upp.

Filuppladdning med JSP-operationer

I diagrammet nedan kan vi se att filen har laddats upp till 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:

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

Code Rad 3-5: Här importerar vi FileInputStream, IOException och PrintWriter från java.io-paketet.

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

Code Linje 18: Som vi har definierat en href, som kommer att omslutas av en URL, så GET-metoden kommer att bearbetas (doGet kommer att anropas i servleten), som också omsluter request- och response-objekt.

Code Rad 19-20: Vi anger innehållstypen i svarsobjektet och hämtar även writer-objektet från svaret.

Code Rad 21-22: Definiera en variabel som gurufile med värdet test.txt och gurupath som c:/guru/upload/.

Code Rad 23-25: Vi ställer in innehållstypen med hjälp av response-objektet och vi använder setHeader-metoden, som ställer in headern i response-objektet som filnamnet som har laddats upp.

Code Rad 27-28: Vi skapar en FileInputStream där vi kommer att lägga till gurupath+gurufile.

Code Rad 31-33: Här har vi tagit en medan slingan vilket kommer att köras tills filen är läst, därför har vi angett villkoret != -1. I detta villkor skriver vi med hjälp av printwriter-objektet out.

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

Produktion:

Laddar ned fil

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

Vanliga frågor

Ja. AI-assistenter kan bygga upp servlets och JSP-formulär för filuppladdning och nedladdning, lägga till Apache Commons FileUpload-logik och föreslå validering. Du bör fortfarande testa koden och granska filsökvägar och storleksgränser.

Ja. AI-baserade skannrar kan inspektera uppladdade filer för skadlig kod, oväntade typer eller överdimensionerade nyttolaster innan de når lagring. Detta lägger till ett skyddslager, även om validering av typ och storlek på serversidan fortfarande är avgörande.

Multipart/form-data-kodningen delar upp begäran i delar så att binär fildata transmitted intakt. Utan den skickar webbläsaren bara filnamnet, inte det faktiska filinnehållet, till servern.

Apache Commons FileUpload, tillsammans med Commons IO, används flitigt. Det analyserar flerpartsförfrågningar, exponerar varje FileItem och skriver det uppladdade innehållet till en vald katalog på servern.

Sammanfatta detta inlägg med: