Computer >> Máy Tính >  >> Lập trình >> Lập trình

Làm cách nào bạn có thể tải tệp lên bằng JSP?

JSP có thể được sử dụng với thẻ biểu mẫu HTML để cho phép người dùng tải tệp lên máy chủ. Tệp được tải lên có thể là tệp văn bản hoặc tệp nhị phân hoặc tệp hình ảnh hoặc bất kỳ tài liệu nào.

Tạo biểu mẫu tải lên tệp

Bây giờ chúng ta hãy hiểu cách tạo một biểu mẫu tải lên tệp. Mã HTML sau tạo một biểu mẫu người tải lên. Sau đây là những điểm quan trọng cần lưu ý -

  • Biểu mẫu phương pháp thuộc tính phải được đặt thành POST và không thể sử dụng phương thức GET.

  • Biểu mẫu enctype thuộc tính phải được đặt thành nhiều phần / dữ liệu biểu mẫu .

  • Biểu mẫu hành động thuộc tính phải được đặt thành tệp JSP sẽ xử lý việc tải tệp lên tại máy chủ phụ trợ. Ví dụ sau đang sử dụng uploadFile.jsp tệp chương trình để tải tệp lên.

  • Để tải lên một tệp, bạn nên sử dụng một thẻ có thuộc tính type ="file" . Để cho phép nhiều tệp tải lên, hãy bao gồm nhiều thẻ đầu vào với các giá trị khác nhau cho thuộc tính name. Trình duyệt liên kết nút Duyệt qua với mỗi nút.

Ví dụ

<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>

Điều này sẽ hiển thị kết quả sau. Giờ đây, bạn có thể chọn tệp từ PC cục bộ và khi người dùng nhấp vào "Tải lên tệp", biểu mẫu sẽ được gửi cùng với tệp đã chọn -

Đầu ra

File Upload
Select a file to upload

LƯU Ý - Biểu mẫu trên chỉ là biểu mẫu giả và sẽ không hoạt động, bạn nên thử mã trên trên máy của mình để làm cho nó hoạt động.

Viết tập lệnh JSP phụ trợ

Bây giờ chúng ta hãy xác định vị trí nơi các tệp đã tải lên sẽ được lưu trữ. Bạn có thể viết mã này trong chương trình của mình hoặc tên thư mục này cũng có thể được thêm vào bằng cách sử dụng cấu hình bên ngoài, chẳng hạn như context-param phần tử trong web.xml như sau -

<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>

Sau đây là mã nguồn cho UploadFile.jsp . Điều này có thể xử lý việc tải lên nhiều tệp cùng một lúc. Bây giờ chúng ta hãy xem xét những điều sau trước khi tiếp tục tải tệp lên.

  • Ví dụ sau phụ thuộc vào FileUpload ; đảm bảo bạn có phiên bản mới nhất của commons-fileupload.x.x.jar tệp trong classpath của bạn. Bạn có thể tải xuống từ https://commons.apache.org/fileupload/.

  • FileUpload phụ thuộc vào Commons IO; đảm bảo bạn có phiên bản commons-io-x.x.jar mới nhất tệp trong classpath của bạn. Bạn có thể tải xuống từ https://commons.apache.org/io/.

  • Trong khi kiểm tra ví dụ sau, bạn nên tải lên tệp có kích thước nhỏ hơn maxFileSize nếu không tệp sẽ không được tải lên.

  • Đảm bảo rằng bạn đã tạo thư mục c:\ temp c:\ apache-tomcat5.5.29 \ webapps \ data rất tốt trước.

<%@ 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>");
   }
%>

Bây giờ, hãy thử tải tệp lên bằng biểu mẫu HTML mà bạn đã tạo ở trên. Khi bạn thử https:// localhost:8080 / UploadFile.htm , nó sẽ hiển thị kết quả sau. Điều này sẽ giúp bạn tải lên bất kỳ tệp nào từ máy cục bộ của mình.

File Upload
Select a file to upload

Nếu tập lệnh JSP của bạn hoạt động tốt, tệp của bạn phải được tải lên trong c:\ apache-tomcat5.5.29 \ webapps \ data \ thư mục.