Завантаження файлів 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. Крім того, тут ми вводимо атрибут ie, який визначає, як дані форми мають кодуватися та надсилатися на сервер, і він використовується лише з методом POST. Тут ми встановлюємо multipart/form-data для файлу (оскільки дані будуть великими).

Рядок коду 13: Тут ми вказуємо елемент guru_file з типом 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 у конфігурацію коду. Нам доведеться імпортувати клас fileupload з бібліотеки org.apache.commons.

Рядок коду 23: Тут у нас є метод doPost(), який буде викликаний, оскільки ми передаємо метод POST у JSP, і він буде запитувати та відповідати об’єкти як його параметри

Рядок коду 26: Тут ми створюємо об’єкт класу ServletFileUpload із пакета fileUpload із бібліотеки org.apache.commons, який перевірятиме наявність файлових об’єктів у JSP. Якщо такі файли будуть знайдені, ці файлові об’єкти буде взято із запиту.

Рядок коду 27-32: Ми будемо повторювати кількість файлів, перевіряючи, скільки елементів файлу присутні в багатокомпонентному об’єкті, який є об’єктом списку (якщо ми завантажуємо більше одного файлу), і збережемо його в папці c:/guru/upload із вказаною назвою файлу . Ми записуємо файл за допомогою методу write об’єкта file у згадану папку.

Рядок коду 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, і ми отримаємо гіперпосилання «Завантажити тут». Коли ви натискаєте на цей файл гіперпосилання, він завантажується в систему.

Підсумки

  • Ми дізналися про реєстраційну форму для реєстрації в будь-якому додатку
  • Дізналися більше про те, як працюють форми входу та виходу.
  • Також дізнався про завантаження та завантаження файлу через JSP.