2016-12-02 69 views
2

我正在本地主機上創建一個簡單的Web應用程序。我有這樣的表格:如何使用JSP和Servlet在Java中上傳文件?

<form method="post" enctype="multipart/form-data" action="UploadFile"> 
    File: 
    <input type="file" name="file" id="file" /> 
    Submit Button: 
    <input type="submit" value="upload"/> 
</form> 

不是我確切的形式,但你有想法。 UploadFile(即action =「UploadFile」)是一個Servlet。現在我知道我想要文件上傳到的路徑。爲了討論,說的路徑是這樣的:

String path = "Project\\web\\files\\"; 
//I want the file to be put into this folder. 

所以我怎麼處理上傳文件,該文件是我的時刻,我剛纔寫的路徑桌面。

我一直在使用Java,但從未做過文件上傳。我在網上查看了一些解決方案,與其他編程語言中處理文件上傳的簡單性相比,它看起來非常複雜。

上傳這個文件的最好方法是什麼?

回答

2

添加以下jar文件

公地集合-3.1.jar

公地文件上傳-1.2.2.jar

公地IO-2.1.jar

commons-logging-1.0.4.jar

Jsp Page

<%@ 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>File Upload</title> 
</head> 
<body> 
<form method="post" action="UploadServlet" enctype="multipart/form-data"> 
Select file to upload: 
<input type="file" name="file" id="file"/><br/><br/> 
<input type="submit" value="Upload" /> 
</form> 
</body> 
</html> 

servlet代碼

package com.servlet; 

import java.io.File; 
import java.io.IOException; 
import java.util.Iterator; 
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.FileUploadException; 
import org.apache.commons.fileupload.disk.DiskFileItemFactory; 
import org.apache.commons.fileupload.servlet.ServletFileUpload; 

/** 
* Servlet implementation class UploadServlet 
*/ 
public class UploadServlet extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    private static final String DATA_DIRECTORY = "data"; 
    private static final int MAX_MEMORY_SIZE = 1024 * 1024 * 2; 
    private static final int MAX_REQUEST_SIZE = 1024 * 1024; 

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     // Check that we have a file upload request 
     boolean isMultipart = ServletFileUpload.isMultipartContent(request); 

     if (!isMultipart) { 
      return; 
     } 

     // Create a factory for disk-based file items 
     DiskFileItemFactory factory = new DiskFileItemFactory(); 

     // Sets the size threshold beyond which files are written directly to 
     // disk. 
     factory.setSizeThreshold(MAX_MEMORY_SIZE); 

     // Sets the directory used to temporarily store files that are larger 
     // than the configured size threshold. We use temporary directory for 
     // java 
     factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); 

     // constructs the folder where uploaded file will be stored 
     String uploadFolder = getServletContext().getRealPath("") 
       + File.separator + DATA_DIRECTORY; 

     // Create a new file upload handler 
     ServletFileUpload upload = new ServletFileUpload(factory); 

     // Set overall request size constraint 
     upload.setSizeMax(MAX_REQUEST_SIZE); 

     try { 
      // Parse the request 
      List items = upload.parseRequest(request); 
      Iterator iter = items.iterator(); 
      while (iter.hasNext()) { 
       FileItem item = (FileItem) iter.next(); 

       if (!item.isFormField()) { 
        String fileName = new File(item.getName()).getName(); 
        String filePath = uploadFolder + File.separator + fileName; 
        File uploadedFile = new File(filePath); 
        System.out.println(filePath); 
        // saves the file to upload directory 
        item.write(uploadedFile); 
       } 
      } 

      // displays done.jsp page after upload finished 
      getServletContext().getRequestDispatcher("/done.jsp").forward(
        request, response); 

     } catch (FileUploadException ex) { 
      throw new ServletException(ex); 
     } catch (Exception ex) { 
      throw new ServletException(ex); 
     } 

    } 

} 

你的web.xml文件應該是這樣的

<servlet> 
    <description></description> 
    <display-name>UploadServlet</display-name> 
    <servlet-name>UploadServlet</servlet-name> 
    <servlet-class>com.servlet.UploadServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>UploadServlet</servlet-name> 
    <url-pattern>/UploadServlet</url-pattern> 
    </servlet-mapping> 
相關問題