📜  JSP-文件上传

📅  最后修改于: 2020-11-13 05:24:02             🧑  作者: Mango


在本章中,我们将讨论JSP中的文件上传。 JSP可以与HTML表单标记一起使用,以允许用户将文件上传到服务器。上载的文件可以是文本文件,二进制文件或图像文件,也可以只是任何文档。

创建文件上传表单

现在让我们了解如何创建文件上传表单。以下HTML代码创建一个上载器表单。以下是要注意的重点-

  • 表单方法属性应设置为POST方法,并且不能使用GET方法。

  • 表单enctype属性应设置为multipart / form-data

  • 表单操作属性应设置为一个JSP文件,该文件将处理后端服务器上的文件上传。以下示例是使用uploadFile.jsp程序文件上传文件。

  • 要上传单个文件,应使用单个标签,其属性类型为“ file” 。要允许上传多个文件,请为名称属性添加多个输入标签,并使用不同的值。浏览器将“浏览”按钮与每个按钮相关联。

File Uploading Form
   
   
   
      

File Upload:

Select a file to upload:

这将显示以下结果。现在,您可以从本地PC中选择一个文件,并且当用户单击“上传文件”时,表单将与所选文件一起提交-

File Upload − 
Select a file to upload − 
 
 
 
 

注意-上面的表格只是伪表格,无法使用,您应该在计算机上尝试上述代码以使其正常运行。

编写后端JSP脚本

现在让我们定义上传文件的存储位置。您可以在程序中对此进行硬编码,也可以使用外部配置(例如web.xml中的context-param元素)添加此目录名称,如下所示-


....
 
   Location to store uploaded file 
   file-upload 
   
      c:\apache-tomcat-5.5.29\webapps\data\
    

....

以下是UploadFile.jsp的源代码。这样可以一次处理多个文件的上传。现在让我们在继续上传文件之前考虑以下内容。

  • 以下示例取决于FileUpload ;确保您的类路径中具有commons-fileupload.xxjar文件的最新版本。您可以从https://commons.apache.org/fileupload/下载。

  • FileUpload取决于Commons IO。确保您的类路径中具有commons-io-xxjar文件的最新版本。您可以从https://commons.apache.org/io/下载。

  • 在测试以下示例时,您应该上传小于maxFileSize的文件,否则将不会上传该文件。

  • 确保您已经预先创建了目录c:\ tempc:\ apache-tomcat5.5.29 \ webapps \ 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("");
         out.println("");
         out.println("JSP File upload");  
         out.println("");
         out.println("");
         
         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 + "
"); } } out.println(""); out.println(""); } catch(Exception ex) { System.out.println(ex); } } else { out.println(""); out.println(""); out.println("Servlet upload"); out.println(""); out.println(""); out.println("

No file uploaded

"); out.println(""); out.println(""); } %>

现在,尝试使用上面创建的HTML表单上传文件。当您尝试http:// localhost:8080 / UploadFile.htm时,它将显示以下结果。这将帮助您从本地计算机上载任何文件。

File Upload − 
Select a file to upload − 
 
 
 

如果您的JSP脚本运行良好,则应将文件上传到c:\ apache-tomcat5.5.29 \ webapps \ data \目录中。