Качване и изтегляне на JSP файл

В този пример ще научим за качването и изтеглянето на файл чрез JSP.

Въвеждането на файла и изхода са много важни операции. Тук ще четем и пишем файл с помощта на JSP.

Качване на JSP файл

  • Можем да качваме всякакви файлове с помощта на JSP.
  • Това може да бъде текстов файл, двоичен файл, файл с изображение или друг документ.
  • Тук, в случай на качване на файл, ще се използва само методът POST, а не методът GET.
  • Атрибутът Enctype трябва да бъде зададен на multipart/form-data.

Пример: Използване на действие

В този пример качваме файл с помощта на IO обект

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>

Обяснение на кода:

Action_file.jsp

Кодов ред 12-18: Тук създаваме формуляр с файлово поле, което ще качи файл на сървъра и действието ще бъде предадено на action_file_upload.jsp

Action_file_upload.jsp

Кодов ред 20: Тук даваме пътя на файла към определен път

Кодов ред 23-38: Тук проверяваме дали типът съдържание е multipart/form-data. Ако случаят е такъв, тогава съдържанието е от файлов тип и се чете. След като файлът бъде прочетен, той се записва във временния файл и след това временният файл се преобразува в основния файл.

Когато изпълните горния код, получавате следния изход

Качване на JSP файл

Изход:

Ние качваме файл, като използваме опцията за избор на бутон за файл и бутонът за качване на файл ще качи файла на сървъра по предоставения път.

Пример: Използване на JSP операции

В този пример ще качим файл с помощта на JSP операции. Ще вземем формуляр, който ще има бутон „качване“ и когато щракнете върху бутона за качване, файлът ще бъде качен.

Качване_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>

Обяснение на кода:

Кодов ред 11-12: Тук вземаме формуляр, който има действие върху сервлета guru_upload, който ще премине през метод POST. Също така, тук ние enctype ie атрибут, който определя как данните от формуляра трябва да бъдат кодирани и изпратени до сървъра и се използва само с POST метод. Тук задаваме като multipart/form-data, което е за файла (тъй като данните ще бъдат големи).

Кодов ред 13: Тук посочваме елемент guru_file с тип файл и даваме размер 50.

Кодов ред 15: Това е бутон за тип изпращане с име „Качване“ върху него, чрез който сървлетът за действие ще бъде извикан и заявката ще бъде обработена в него, а файлът ще бъде прочетен и записван в сървлета.

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


}

Обяснение на кода:

Кодов ред 12-14: Тук ще трябва да импортираме библиотеката org.apache.commons в конфигурацията на кода. Ще трябва да импортираме клас за качване на файлове от библиотеката org.apache.commons.

Кодов ред 23: Тук имаме метод doPost(), който ще бъде извикан, тъй като предаваме POST метод в JSP и той ще иска и отговаря обекти като негови параметри

Кодов ред 26: Тук създаваме обект от клас ServletFileUpload от пакет fileUpload от библиотека org.apache.commons, който ще провери дали има файлови обекти в JSP. Ако бъдат намерени такива, тези файлови обекти ще бъдат взети от заявката.

Кодов ред 27-32: Ще повторим броя на файловете, като проверим колко файлови елемента присъстват в multiparts обект, който е обект от списък (ако качим повече от един файл) и ще го запазим в папка c:/guru/upload с предоставеното име на файл . Записваме файла, използвайки метода за запис на файловия обект в папката, която беше спомената.

Кодов ред 34: Ако няма изключение, тогава задаваме атрибут в заявката като gurumessage със стойност „Файлът е качен успешно“.

Кодов ред 35-36: Ако възникне изключение, тогава се задава съобщение, че „Качването на файл е неуспешно“

Кодов ред 40: Ако файлът не е намерен, задайте съобщение като „Няма намерен файл“

Кодов ред 42: Препращане на заявка чрез обект requestdispatcher към result.jsp с обекти заявка и отговор.

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>

Обяснение на кода:

Кодов ред 10: Тук получаваме атрибута от обекта на заявката със стойност gurumessage в обект на низ.

Кодов ред 11: Тук отпечатваме това съобщение.

Когато изпълним горния код, получаваме следния изход

Изход:

Получаваме формуляр, в който има полета за избор на файл от директория. След като файлът е избран, трябва да щракнем върху бутона за качване.

Качване на файл с помощта на JSP операции

След като щракнете върху бутона за качване, получаваме съобщение, че файлът е качен успешно.

Качване на файл с помощта на JSP операции

В диаграмата по-долу можем да видим, че файлът е качен в папка c:/guru/upload.

Качване на файл с помощта на JSP операции

Изтегляне на JSP файл

В този пример ще изтеглим файл от директория, като щракнете върху бутона.

Изтегляне_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>

Обяснение на кода:

Кодов ред 10: Тук сме дали връзка за изтегляне на файл от папка c:/guru/upload с помощта на сервлета 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
	}

}

Обяснение на кода:

Кодов ред 3-5: Тук импортираме FileInputStream, IO Exception и PrintWriter от пакета java.io.

Кодов ред 15: Дефинираме guru_download сървлет който разширява HttpServlet.

Кодов ред 18: Тъй като дефинирахме href, който ще бъде затворен в URL, така че методът GET ще бъде обработен (doGet ще бъде извикан в сървлета), който също включва обекти за заявка и отговор.

Кодов ред 19-20: Задаваме тип съдържание в обекта за отговор и също така получаваме обект за писане от отговора.

Кодов ред 21-22: Дефиниране на променлива като gurufile като стойност test.txt и gurupath като c:/guru/upload/

Кодов ред 23-25: Задаваме типа на съдържанието с помощта на обект на отговор и използваме метода setHeader, който задава заглавката в обекта на отговор като име на файл, който е качен.

Кодов ред 27-28: Създаваме FileInputStream, в който ще добавим gurupath+gurufile.

Кодов ред 31-33: Тук сме взели a докато цикъл който ще работи, докато файлът бъде прочетен, следователно сме дали условие като != -1. В това състояние ние пишем с помощта на обекта printwriter out.

Когато изпълните горния код, ще получите следния изход

Изход:

Файлът се изтегля

Изход:

Трябва да щракнем върху downloading_1.jsp и ще получим хипервръзка като „Изтеглете тук“. Когато щракнете върху този файл с хипервръзка, той ще бъде изтеглен в системата.

Oбобщение

  • Научихме за регистрационния формуляр, за да се регистрираме във всяко приложение
  • Научих повече за това как работят формите за влизане и излизане.
  • Също така научих за качването и изтеглянето на файл чрез JSP.