Java檔案上傳2018-11-8
阿新 • • 發佈:2018-11-12
第一步:(步驟結束後面就是html和servlet的原始碼)
準備一個form表單:特別注意的是form表單裡要新增
enctype="multipart/form-data"
第二步:準備一個servlet
1:建立一個上傳元件工廠
2;建立一個上傳元件
3:設定檔案上傳的字符集
4:生成表單元素的集合
5:遍歷集合,判斷是不是表單元素
6:不是的話,就獲取檔名稱
7:通過get方法獲取檔案內容存放在位元組陣列中
8:獲取一個當前web應用的物理路徑
9:在路徑下新增一個接受上傳檔案的額目錄
10:判斷目錄是否存在,不存在就建立
11:把檔名稱追加到剛才新建的目錄中,
12:通過這個檔案路徑建立一個檔案輸出流
13:通過輸出流寫出就OK了
html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="/upload" method="post" enctype="multipart/form-data"> <lable>username</lable><input type="text" name="username"> <lable>img</lable><input type="file" name="img"> <input type="submit"> </form> </body> </html>
servlet:
package userservlet; 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; 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 java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; @WebServlet(name = "UploadServlet",urlPatterns = {"/upload"}) public class UploadServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //上傳元件工廠 DiskFileItemFactory diskFileItemFactory=new DiskFileItemFactory(); //建立上傳元件工廠 ServletFileUpload servletFileUpload=new ServletFileUpload(diskFileItemFactory); //設定上傳檔案字符集 servletFileUpload.setHeaderEncoding("UTF-8"); //生成表單元素 try { List<FileItem> fileItems=servletFileUpload.parseRequest(request); for (FileItem fileItem:fileItems){ if(fileItem.isFormField()){//判斷是否是表單 System.out.println(fileItem.getString()); }else{ //獲取上傳檔名稱 String name=fileItem.getName(); byte[] b=fileItem.get();//獲取檔案內容 //獲取在開發Web方面的應用時, 經常需要獲取 伺服器中當前WebRoot的物理路徑 String path=this.getServletContext().getRealPath("/"); System.out.println(path); //在伺服器的當前物理路徑新增一個目錄 File f=new File(path+File.separator+"upload"); //判斷目錄是否存在,不存在就建立 if(!f.isDirectory()){ f.mkdir(); } //把要上傳的檔名稱追加到剛才的路徑上 String filename=path+File.separator+"upload"+File.separator+name; //根據檔案檔案建立一個檔案輸出流 FileOutputStream out=new FileOutputStream(filename); //寫出檔案 out.write(b); out.close(); } } } catch (FileUploadException e) { e.printStackTrace(); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } }