更新時間:2020-10-26 17:35:55 來源:動力節點 瀏覽3850次
文件上傳實際上就是Browser (瀏覽器)跟 Server(服務器)的數據互動,JavaWeb實現文件上傳也不例外,當用戶在前端網頁點擊文件上傳后,用戶上傳提交的內容會存放到臨時的文件中,我們使用getpart來獲取Part對象,并通過Part對象獲得流,javaWeb的servlet會獲得用戶所提交的文件并且將文件存放到服務器里。
get 請求,參數是放在 URL 地址欄中發送到服務器的 /xxx?id=3&name=admin
post 請求,參數是放在請求體中發送的,所以地址欄看不到數據
enctype 表示數據的傳輸格式:
application/x-www-form-urlencoded : id=3&name=admin
multpart/form-date ,表示數據將會被分段處理之后再發送
HTML中用來跟文件系統進行交互的手段只有一個 :input type=file
如果想要上傳的話:
必須要用 post 進行提交,這種方式,將會把數據封裝在請求體中進行發送
必須指定 enctype 為 multipart/form-date ,這樣數據才會被正確分段處理并上傳
JavaWeb實現文件上傳基本步驟:
前端頁面:
寫一個 form 表單,使用 post 方法,并指定 enctype="multipart/form-date "
使用 input type = file ,來選擇文件
后臺接收:
要在 Servelt 上面添加 @MultipartConfig 注解
使用 req.getPart("name") 來接收文件
使用 part.write("路徑") 來保存文件到服務器的硬盤
圖片上傳案例
//要求
//1.保存為正確的后綴名
//2. 限制上傳圖片的大小為2M
//3. 正確的渲染上傳的圖片
//頁面端(upload.jsp)上傳圖片的代碼
文件上傳:
點擊上傳
//servlet 端
@WebServlet("/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws Exception{
req.getRequestDispatcher("/jsp/upload.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws Exception{
Part part = req.getPart("img") //獲取上傳文件
if (prat.getSize() < 2 * 1024 * 1024 ) { //上傳文件小于2MB時執行
//保存為什么名?上傳的時間加上上傳的文件名做為保存名
String savedName = new simpleDateFormat("yyyyMMdd_hhmmss").format(new Date)
+ "-"
+ part.getSubmittedFileName();
//保存的位置:
//1. getServletContext().getRealPath("/") 獲取文件在電腦中的絕對路徑, “/”指代項目根目錄
//2. new File(savedDir).mkdir() 當文件路徑不存在時創建文件路徑
String savedDir = getServletContext().getRealPath("/img/");
new File(savedDir).mkdir();
//使用 part.write('路徑') 來保存圖片到服務器的硬盤
part.write(savedDir + savedName);
//重定向到upload_success.jsp頁面,path把文件名傳過去
resp.sendRedirect(req.getContextPath() + "/jsp/upload_success.jsp?path=" + savedName);
}
}
}
//頁面端(upload_success.jsp)渲染的代碼
你上傳的圖片:
啟動工程之后,選擇上傳的文件點擊上傳,并在服務器目錄下得到上傳的文件
到這里已全部解釋了Javaweb實現文件的上傳功能,當然這只是最基本的文件上傳功能,與之對應的則是下載功能。當然這些都是最底層的功能實現,在實際應用中,往往JavaWeb文件上傳功能都是有很大程度的修飾和完善的,對文件的大小格式的限制,還有后臺數據的處理等等。我們可以在本站的JavaWeb教程中找到更多的JavaWeb相關知識,提升自己的前端開發能力。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習