form表單文件上傳,servlet文件接收


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);
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM