Учебники

19) Загрузка файла JSP

В этом примере мы собираемся узнать о загрузке и загрузке файла через JSP.

Файл ввода вывода очень важные операции. Здесь мы собираемся прочитать и написать файл, используя JSP.

Загрузка файла JSP

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

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

В этом примере мы загружаем файл, используя объект ввода-вывода

Action_file.jsp

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  7. <title>Guru File</title>
  8. </head>
  9. <body>
  10. <a>Guru File Upload:</a>
  11. Select file: <br />
  12. <form action="action_file_upload.jsp" method="post"
  13. enctype="multipart/form-data">
  14. <input type="file" name="file" size="50" />
  15. <br />
  16. <input type="submit" value="Upload File" />
  17. </form>
  18. </body>
  19. </html>

Action_file_upload.jsp

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <%@ page import="java.io.*,java.util.*, javax.servlet.*" %>
  4. <%@ page import="javax.servlet.http.*" %>
  5. <%@ page import="org.apache.commons.fileupload.*" %>
  6. <%@ page import="org.apache.commons.fileupload.disk.*" %>
  7. <%@ page import="org.apache.commons.fileupload.servlet.*" %>
  8. <%@ page import="org.apache.commons.io.output.*" %>
  9. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  10. <html>
  11. <head>
  12. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  13. <title>Guru File Upload</title>
  14. </head>
  15. <body>
  16. <%
  17. File file ;
  18. int maxFileSize = 5000 * 1024;
  19. int maxMemSize = 5000 * 1024;
  20. String filePath = "E:/guru99/data";
  21.  
  22. String contentType = request.getContentType();
  23. if ((contentType.indexOf("multipart/form-data") >= 0)) {
  24.  
  25. DiskFileItemFactory factory = new DiskFileItemFactory();
  26. factory.setSizeThreshold(maxMemSize);
  27. factory.setRepository(new File("c:\\temp"));
  28. ServletFileUpload upload = new ServletFileUpload(factory);
  29. upload.setSizeMax( maxFileSize );
  30. try{
  31. List fileItems = upload.parseRequest(request);
  32. Iterator i = fileItems.iterator();
  33. out.println("<html>");
  34. out.println("<body>");
  35. while ( i.hasNext () )
  36. {
  37. FileItem fi = (FileItem)i.next();
  38. if ( !fi.isFormField () ) {
  39. String fieldName = fi.getFieldName();
  40. String fileName = fi.getName();
  41. boolean isInMemory = fi.isInMemory();
  42. long sizeInBytes = fi.getSize();
  43. file = new File( filePath + "yourFileName") ;
  44. fi.write( file ) ;
  45. out.println("Uploaded Filename: " + filePath + fileName + "<br>");
  46. }
  47. }
  48. out.println("</body>");
  49. out.println("</html>");
  50. }catch(Exception ex) {
  51. System.out.println(ex);
  52. }
  53. }else{
  54. out.println("<html>");
  55. out.println("<body>");
  56. out.println("<p>No file uploaded</p>");
  57. out.println("</body>");
  58. out.println("</html>");
  59. }
  60. %>
  61. </body>
  62. </html>
  63.  

Пояснение к коду:

Action_file.jsp

Строка кода 12-18: здесь мы создаем форму с полем file, которая будет загружать файл на сервер и действие будет передано в action_file_upload.jsp

Action_file_upload.jsp

Строка кода 20: здесь мы даем путь к файлу для конкретного пути

Строка кода 23-38: Здесь мы проверяем, является ли тип контента multipart / form-data. Если это так, то содержимое имеет тип файла, и оно читается. После прочтения файла он записывается во временный файл, а затем временный файл преобразуется в основной файл.

Когда вы выполните приведенный выше код, вы получите следующий вывод

Действие JSP - загрузка файла, фильтр JSP, запрос клиента, ответ сервера, обработка файлов cookie, обработка дат

Вывод:

Мы загружаем файл, используя кнопку выбора файла, и кнопка загрузки файла загрузит файл на сервер по указанному пути.

Пример: использование операций JSP

В этом примере мы собираемся загрузить файл, используя операции JSP.

Мы возьмем форму, в которой будет кнопка «Загрузить», и когда вы нажмете кнопку «Загрузить», файл будет загружен.

Uploading_1.jsp

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  7. <title>Guru Uploading File</title>
  8. </head>
  9. <body>
  10. File: <br />
  11. <form action="guru_upload" method="post"
  12. enctype="multipart/form-data">
  13. <input type="file" name="guru_file" size="50" />
  14. <br />
  15. <input type="submit" value="Upload" />
  16. </form>
  17. </body>
  18. </html>

Пояснение к коду:

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

Строка кода 13: Здесь мы указываем элемент guru_file с типом file и определяем размер как 50.

Строка кода 15: Это кнопка типа отправки с именем «Upload», через которую будет вызываться сервлет действия, и в него будет обработан запрос, а файл будет считан и записан в сервлет.

Guru_upload.java

  1. package demotest;
  2.  
  3. import java.io.File;
  4. import java.io.IOException;
  5. import java.util.List;
  6.  
  7. import javax.servlet.ServletException;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11.  
  12. import org.apache.commons.fileupload.FileItem;
  13. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  14. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  15.  
  16. public class guru_upload extends HttpServlet {
  17. private static final long serialVersionUID = 1L;
  18. public guru_upload() {
  19. super();
  20. // TODO Auto-generated constructor stub
  21. }
  22. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  23. if(ServletFileUpload.isMultipartContent(request)){
  24. try {
  25. List <FileItem> multiparts = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
  26. for(FileItem item : multiparts){
  27. if(!item.isFormField()){
  28. String name = new File(item.getName()).getName();
  29. item.write( new File("c:/guru/upload" + File.separator + name));
  30. }
  31. }
  32. //File uploaded successfully
  33. request.setAttribute("gurumessage", "File Uploaded Successfully");
  34. } catch (Exception ex) {
  35. request.setAttribute("gurumessage", "File Upload Failed due to " + ex);
  36. }
  37. }else{
  38. request.setAttribute("gurumessage","No File found");
  39. }
  40. request.getRequestDispatcher("/result.jsp").forward(request, response);
  41. }
  42.  
  43.  
  44. }

Пояснение к коду:

Строка кода 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 с имя файла, которое было предоставлено. Мы записываем файл, используя метод записи файлового объекта в указанную папку.

Строка кода 34: Если исключений нет, мы устанавливаем атрибут запроса как gurumessage со значением «Файл успешно загружен».

Строка кода 35-36: если возникает исключение, тогда устанавливается сообщение «Ошибка загрузки файла»

Строка кода 40: если файл не найден, установить сообщение «Файл не найден»

Строка кода 42: Пересылка запроса с использованием объекта requestdispatcher в result.jsp с объектами запроса и ответа.

Result.jsp

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  7. <title>Guru Result</title>
  8. </head>
  9. <body>
  10. <% String msg = (String)request.getAttribute("message");
  11. out.println(msg);
  12. %>
  13. </body>
  14. </html>
  15.  

Пояснение к коду:

Строка кода 10: Здесь мы получаем атрибут из объекта запроса со значением gurumessage в строковый объект.

Строка кода 11: Здесь мы печатаем это сообщение.

Когда мы выполняем приведенный выше код, мы получаем следующий вывод

Вывод:

Мы получаем форму, в которой есть поля для выбора файла из каталога. Как только файл выбран, мы должны нажать на кнопку загрузки.

Пример JSP

Как только кнопка загрузки нажата, мы получаем сообщение, что файл успешно загружен.

Пример JSP

На диаграмме ниже мы видим, что файл был загружен в папку c: / guru / upload.

Пример JSP

Загрузка файла:

В этом примере мы собираемся скачать файл из каталога, нажав на кнопку.

Downloading_1.jsp

  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2. pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <html>
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  7. <title>Downloading Guru Example</title>
  8. </head>
  9. <body>
  10. Guru Downloading File<a href="guru_download">Download here!!!</a>
  11. </body>
  12. </html>

Пояснение к коду:

Строка кода 10: Здесь мы дали ссылку для загрузки файла из папки c: / guru / upload с помощью сервлета guru_download.

Guru_download.java

  1. package demotest;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.IOException;
  5. import java.io.PrintWriter;
  6.  
  7. import javax.servlet.ServletException;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11.  
  12. /**
  13. * Servlet implementation class guru_download
  14. */
  15. public class guru_download extends HttpServlet {
  16. private static final long serialVersionUID = 1L;
  17.  
  18. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  19. response.setContentType("text/html");
  20. PrintWriter out = response.getWriter();
  21. String gurufile = "test.txt";
  22. String gurupath = "c:/guru/upload/";
  23. response.setContentType("APPLICATION/OCTET-STREAM");
  24. response.setHeader("Content-Disposition", "attachment; filename=\""
  25. + gurufile + "\"");
  26. FileInputStream fileInputStream = new FileInputStream(gurupath
  27. + gurufile);
  28. int i;
  29. while ((i = fileInputStream.read()) != -1) {
  30. out.write(i);
  31. }
  32. fileInputStream.close();
  33. out.close();
  34. }
  35.  
  36.  
  37. /**
  38. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  39. */
  40. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  41. // TODO Auto-generated method stub
  42. }
  43.  
  44. }

Пояснение к коду:

Строка кода 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: Здесь мы взяли цикл while, который будет работать до тех пор, пока файл не будет прочитан, поэтому мы задали условие как! = -1. В этом состоянии мы пишем с использованием объекта printwriter.

Когда вы выполните приведенный выше код, вы получите следующий вывод

Вывод:

Пример JSP

Вывод:

Мы должны нажать на download_1.jsp, мы получим гиперссылку как «Скачать здесь». При нажатии на этот файл гиперссылки, он будет загружен в систему.

Резюме:

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