007.Servlet3.0 文件上傳

沒有針對Servlet3.1 說明,請具體看代碼說明
沒有進(jìn)行任何封裝和代碼的優(yōu)化
只是體會上傳的不同而已

<form action="uploadFile" method="post" enctype="multipart/form-data">
    <input type="file" name="photo">
    <button>上傳</button>
</form>
package com.shxt.servlet;
 
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.Random;
import java.util.UUID;
 
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
 
/**
 * Servlet implementation class UploadServlet
 */
@WebServlet("/uploadFile")
@MultipartConfig(
        fileSizeThreshold=1024*1024*2,  // 2MB  當(dāng)數(shù)據(jù)量大于該值時,內(nèi)容將被寫入文件
        maxFileSize=1024*1024*10,       // 10MB  允許上傳的文件最大值。默認(rèn)值為 -1,表示沒有限制
        maxRequestSize=1024*1024*50     // 50MB  針對該 multipart/form-data 請求的最大數(shù)量,默認(rèn)值為 -1,表示沒有限制
)   
public class UploadServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
 
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                //1.獲取服務(wù)器的絕對路徑
                String path = request.getServletContext().getRealPath("/upload");
                //2.建立文件聯(lián)系
                File folder = new File(path);
                //3.判斷該文件夾是否存在
                if(!folder.exists()/*文件是否存在*/&&!folder.isDirectory()/*是否是文件夾*/){
                        folder.mkdirs();//創(chuàng)建
                }
                //4.獲取上傳的文件 <input type="file" name="photo">
                Part part = request.getPart("photo");
                //5.獲取客戶端文件的名稱
                //獲取文件名稱:
                //Servlet3.0 沒有提供直接獲取文件的名稱 , 所以需要讀取頭部信息獲取文件名 - Tomcat 7
                //Servlet 3.1 增加了新的方法 Part.getSubmittedFileName,用于取得客戶端上傳的文件名。 - Tomcat 8 
                String clientFileName = extractFileName(part);
                //5.1 判斷客戶端是否傳遞數(shù)據(jù)
                if(!clientFileName.isEmpty()){
                        //6.獲取客戶端的后綴名稱
                        String ext = clientFileName.substring(clientFileName.lastIndexOf(".")+1);
                        //7.創(chuàng)建上傳文件的名稱[新文件名稱]
                        //方式一:
                        String uploadNewFileName = (new Date()).getTime()+"_"+(new Random()).nextInt(1000)+"."+ext;
                        //方式二:
                        //String uploadNewFileName = UUID.randomUUID().toString()+ext;
                        //8.上傳文件
                        part.write(path+File.separator+uploadNewFileName);
                }
        }
        /**
     * 從 HTTP header content-disposition中獲得文件名
     * content-disposition中內(nèi)容:form-data; name="dataFile"; filename="PHOTO.JPG"
     */
    private String extractFileName(Part part) {
        String contentDisp = part.getHeader("content-disposition");
        String[] items = contentDisp.split(";");
        for (String s : items) {
            if (s.trim().startsWith("filename")) {
                return s.substring(s.indexOf("=") + 2, s.length()-1);
            }
        }
        return "";
    }
 
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容