Загрузка и выгрузка файла JSP
В этом примере мы узнаем, как загружать и скачивать файл через JSP.
Ввод файла и вывод — очень важные операции. Здесь мы собираемся читать и записывать файл с помощью JSP.
Загрузка файла JSP
- Мы можем загружать любые файлы с помощью JSP.
- Это может быть текстовый файл, двоичный файл, файл изображения или любой другой документ.
- Здесь в случае загрузки файла будет использоваться только метод POST, а не метод GET.
- Атрибут Enctype должен иметь значение multipart/form-data.
Пример: использование действия
В этом примере мы загружаем файл, используя объект IO.
Файл_действия.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>
Расшифровка кода:
Файл_действия.jsp
Строка кода 12–18: Здесь мы создаем форму с полем файла, которая будет загружать файл на сервер, а действие будет передано в action_file_upload.jsp.
Action_file_upload.jsp
Строка кода 20: Здесь мы указываем путь к файлу по определенному пути
Строка кода 23–38: Здесь мы проверяем, является ли тип контента multipart/form-data. Если это так, то содержимое имеет тип файла и читается. После чтения файла он записывается во временный файл, а затем временный файл преобразуется в основной файл.
Когда вы выполните приведенный выше код, вы получите следующий вывод
Вывод:
Мы загружаем файл, используя опцию кнопки «Выбрать файл», а кнопка «Загрузить файл» загрузит файл на сервер по указанному пути.
Пример: использование операций 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 в конфигурацию кода. Нам придется импортировать класс fileupload из библиотеки org.apache.commons.
Строка кода 23: Здесь у нас есть метод doPost(), который будет вызываться при передаче метода POST в JSP и будет запрашивать и отвечать на объекты в качестве своих параметров.
Строка кода 26: Здесь мы создаем объект класса ServletFileUpload из пакета fileUpload из библиотеки org.apache.commons, который будет проверять, есть ли какие-либо файловые объекты в JSP. Если они найдены, то эти файловые объекты будут взяты из запроса.
Строка кода 27–32: Мы будем перебирать количество файлов, проверяя, сколько элементов файла присутствует в объекте multiparts, который является объектом списка (если мы загружаем более одного файла), и сохраняем его в папке c:/guru/upload с указанным именем файла. . Мы записываем файл, используя метод записи файлового объекта, в упомянутую папку.
Строка кода 34: Если исключений нет, мы устанавливаем атрибут запроса как сообщение гуру со значением «Файл успешно загружен».
Строка кода 35–36: Если возникает исключение, установите сообщение «Ошибка загрузки файла».
Строка кода 40: Если файл не найден, установите сообщение «Файл не найден».
Строка кода 42: Пересылка запроса с использованием объекта requestdispatcher в result.jsp с объектами запроса и ответа.
Результат.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: Здесь мы печатаем это сообщение.
Когда мы выполним приведенный выше код, мы получим следующий вывод
Вывод:
Мы получаем форму, в которой есть поля для выбора файла из каталога. После того, как файл выбран, нам нужно нажать кнопку загрузки.
После нажатия кнопки загрузки мы получим сообщение о том, что файл загружен успешно.
На диаграмме ниже мы видим, что файл был загружен в папку c:/guru/upload.
Загрузка файла 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, в который добавим гурупуть+гуруфайл.
Строка кода 31–33: Здесь мы взяли в то время как цикл который будет работать до тех пор, пока файл не будет прочитан, поэтому мы задали условие как != -1. В этом состоянии мы пишем, используя объект printwriter.
Когда вы выполните приведенный выше код, вы получите следующий вывод
Вывод:
Вывод:
Нам нужно нажать на downloading_1.jsp, и мы получим гиперссылку «Загрузить здесь». Когда вы нажмете на этот файл гиперссылки, он будет загружен в систему.
Резюме
- Мы узнали о регистрационной форме для регистрации в любом приложении.
- Узнайте больше о том, как работают формы входа и выхода.
- Также узнал о загрузке и скачивании файла через JSP.