Учебники

JSP — загрузка файлов

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

Создание формы загрузки файла

Давайте теперь поймем, как создать форму загрузки файла. Следующий HTML-код создает форму загрузчика. Ниже приведены важные моменты, которые следует отметить —

  • Атрибут метода формы должен быть установлен в метод POST, и метод GET не может быть использован.

  • Атрибут формы enctype должен быть установлен в multipart / form-data .

  • Атрибут действия формы должен быть установлен в файл JSP, который будет обрабатывать загрузку файлов на сервер. Следующий пример использует файл программы uploadFile.jsp для загрузки файла.

  • Для загрузки одного файла вы должны использовать один тег <input … /> с атрибутом type = «file» . Чтобы разрешить загрузку нескольких файлов, включите более одного входного тега с разными значениями для атрибута имени. Браузер связывает кнопку «Обзор» с каждым из них.

Атрибут метода формы должен быть установлен в метод POST, и метод GET не может быть использован.

Атрибут формы enctype должен быть установлен в multipart / form-data .

Атрибут действия формы должен быть установлен в файл JSP, который будет обрабатывать загрузку файлов на сервер. Следующий пример использует файл программы uploadFile.jsp для загрузки файла.

Для загрузки одного файла вы должны использовать один тег <input … /> с атрибутом type = «file» . Чтобы разрешить загрузку нескольких файлов, включите более одного входного тега с разными значениями для атрибута имени. Браузер связывает кнопку «Обзор» с каждым из них.

<html>
   <head>
      <title>File Uploading Form</title>
   </head>
   
   <body>
      <h3>File Upload:</h3>
      Select a file to upload: <br />
      <form action = "UploadServlet" method = "post"
         enctype = "multipart/form-data">
         <input type = "file" name = "file" size = "50" />
         <br />
         <input type = "submit" value = "Upload File" />
      </form>
   </body>
   
</html>

Это покажет следующий результат. Теперь вы можете выбрать файл с локального ПК, и когда пользователь нажимает «Загрузить файл», форма отправляется вместе с выбранным файлом —

File Upload

Select a file to upload −



Select a file to upload −

ПРИМЕЧАНИЕ. — Вышеуказанная форма является просто фиктивной формой и не будет работать, вы должны попробовать приведенный выше код на своем компьютере, чтобы она работала

Написание внутреннего JSP-скрипта

Давайте теперь определим место, где будут храниться загруженные файлы. Вы можете жестко запрограммировать это в своей программе, или это имя каталога также можно добавить, используя внешнюю конфигурацию, такую ​​как элемент context-param в web.xml, следующим образом:

<web-app>
....
<context-param> 
   <description>Location to store uploaded file</description> 
   <param-name>file-upload</param-name> 
   <param-value>
      c:\apache-tomcat-5.5.29\webapps\data\
   </param-value> 
</context-param>
....
</web-app>

Ниже приведен исходный код для UploadFile.jsp . Это может обрабатывать загрузку нескольких файлов одновременно. Давайте теперь рассмотрим следующее, прежде чем приступить к загрузке файлов.

  • Следующий пример зависит от FileUpload ; убедитесь, что у вас есть последняя версия файла commons-fileupload.xxjar в вашем classpath. Вы можете скачать его с https://commons.apache.org/fileupload/ .

  • FileUpload зависит от ввода-вывода Commons; убедитесь, что у вас есть последняя версия файла commons-io-xxjar в вашем classpath. Вы можете скачать его с https://commons.apache.org/io/ .

  • При тестировании следующего примера вы должны загрузить файл меньшего размера, чем maxFileSize, иначе файл не будет загружен.

  • Убедитесь, что вы заранее создали каталоги c: \ temp и c: \ apache-tomcat5.5.29 \ webapps \ data .

Следующий пример зависит от FileUpload ; убедитесь, что у вас есть последняя версия файла commons-fileupload.xxjar в вашем classpath. Вы можете скачать его с https://commons.apache.org/fileupload/ .

FileUpload зависит от ввода-вывода Commons; убедитесь, что у вас есть последняя версия файла commons-io-xxjar в вашем classpath. Вы можете скачать его с https://commons.apache.org/io/ .

При тестировании следующего примера вы должны загрузить файл меньшего размера, чем maxFileSize, иначе файл не будет загружен.

Убедитесь, что вы заранее создали каталоги c: \ temp и c: \ apache-tomcat5.5.29 \ webapps \ data .

<%@ 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.*" %>

<%
   File file ;
   int maxFileSize = 5000 * 1024;
   int maxMemSize = 5000 * 1024;
   ServletContext context = pageContext.getServletContext();
   String filePath = context.getInitParameter("file-upload");

   // Verify the content type
   String contentType = request.getContentType();
   
   if ((contentType.indexOf("multipart/form-data") >= 0)) {
      DiskFileItemFactory factory = new DiskFileItemFactory();
      // maximum size that will be stored in memory
      factory.setSizeThreshold(maxMemSize);
      
      // Location to save data that is larger than maxMemSize.
      factory.setRepository(new File("c:\\temp"));

      // Create a new file upload handler
      ServletFileUpload upload = new ServletFileUpload(factory);
      
      // maximum file size to be uploaded.
      upload.setSizeMax( maxFileSize );
      
      try { 
         // Parse the request to get file items.
         List fileItems = upload.parseRequest(request);

         // Process the uploaded file items
         Iterator i = fileItems.iterator();

         out.println("<html>");
         out.println("<head>");
         out.println("<title>JSP File upload</title>");  
         out.println("</head>");
         out.println("<body>");
         
         while ( i.hasNext () ) {
            FileItem fi = (FileItem)i.next();
            if ( !fi.isFormField () ) {
               // Get the uploaded file parameters
               String fieldName = fi.getFieldName();
               String fileName = fi.getName();
               boolean isInMemory = fi.isInMemory();
               long sizeInBytes = fi.getSize();
            
               // Write the file
               if( fileName.lastIndexOf("\\") >= 0 ) {
                  file = new File( filePath + 
                  fileName.substring( fileName.lastIndexOf("\\"))) ;
               } else {
                  file = new File( filePath + 
                  fileName.substring(fileName.lastIndexOf("\\")+1)) ;
               }
               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("<head>");
      out.println("<title>Servlet upload</title>");  
      out.println("</head>");
      out.println("<body>");
      out.println("<p>No file uploaded</p>"); 
      out.println("</body>");
      out.println("</html>");
   }
%>

Теперь попробуйте загрузить файлы, используя HTML-форму, которую вы создали выше. При попытке http: // localhost: 8080 / UploadFile.htm , он будет отображать следующий результат. Это поможет вам загрузить любой файл с вашего локального компьютера.

File Upload

Select a file to upload −


Select a file to upload −

Если ваш JSP-скрипт работает нормально, ваш файл должен быть загружен в каталог c: \ apache-tomcat5.5.29 \ webapps \ data \ .