1.需要導入jar包
2.index.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <!--為了利用DiskFileItemFactory實現文件上傳,在html或jsp頁面中,form表單中method必須設置為post,並且要設置enctype=”multipart/form-data”: --> <form action="FileServlet" method="post" enctype="multipart/form-data"> 姓名:<input type="text" name="uname"> 密碼:<input type="password" name="pwd"> 文件:<input type="file" name="myfile"> <input type="submit" value="提交"> </form> </body> </html>
3.FileServlet.java servlet接收文件代碼
package web; import java.io.File; import java.io.IOException; import java.util.List; import java.util.UUID; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; 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; /* * @WebServlet注解用於標注在一個繼承了HttpServlet類之上,屬於類級別的注解 * 其中/FileServlet 表示訪問該servlet的 url 映射(地址)(此處為相對路徑,即 "項目名稱/FileServlet" ) * 該注解的作用等價於 在web.xml中配置的該servlet的<servlet-mapping>元素中<url-pattern>的配置 * */ @WebServlet("/FileServlet") public class FileServlet extends HttpServlet {// 擴展 HttpServlet 類 //serialVersionUID作用是序列化時保持版本的兼容性,即在版本升級時反序列化仍保持對象的唯一性,用於版本控制 private static final long serialVersionUID = 1L; // 處理 GET 方法請求的方法 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //創建一個解析器工廠 DiskFileItemFactory factory = new DiskFileItemFactory(); //文件上傳解析器 ServletFileUpload upload = new ServletFileUpload(factory); // 判斷enctype屬性是否為multipart/form-data boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart) { try { //解析請求,將表單中每個輸入項封裝成一個FileItem對象 List<FileItem> fileItems = upload.parseRequest(request); // 迭代表單數據 for (FileItem fileItem : fileItems) { //判斷輸入的類型是 普通輸入項 還是文件 if (fileItem.isFormField()) { //普通輸入項 ,得到input中的name屬性的值,fileItem.getFieldName() ////得到輸入項中的值,fileItem.getString("UTF-8"),"UTF-8"防止中文亂碼 System.out.println(fileItem.getFieldName()+"\t"+fileItem.getString("UTF-8")); } else { //上傳的是文件,獲得文件上傳字段中的文件名 //注意IE或FireFox中獲取的文件名是不一樣的,IE中是絕對路徑,FireFox中只是文件名 String fileName = fileItem.getName(); System.out.println(fileName); //Substring是字符串截取,返回值是一個截取后的字符串 //lastIndexOf(".")是從右向左查,獲取.之后的字符串 String ext = fileName.substring(fileName.lastIndexOf(".")); //UUID.randomUUID().toString()是javaJDK提供的一個自動生成主鍵的方法, UUID的唯一缺陷在於生成的結果串會比較長 String name = UUID.randomUUID()+ext; //將FileItem對象中保存的主體內容保存到某個指定的文件中 File file = new File("E:\\火影忍者\\"+name); fileItem.write(file); } } } catch (FileUploadException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }else{ System.out.println("普通表單"); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }