JavaWeb實現文件上傳功能詳解
文件上傳功能的實現
在大多數網站中,我們都可以看見文件上傳和下載功能的實現,今天我們就文件上傳做一個詳細的總結
實現步驟:
1、新建一個JSP頁面:表單必須設置:enctype="multipart/form-data"參數 upload.jsp:
<form action="" method="post" enctype="multipart/form-data"> <!--accept=".txt"標簽用來確定上傳的文件默認類型--> 請選擇您要上傳的文件:<input type="file" name="fileName" accept=".txt" /> <br/> 確認上傳?<input type="submit" value="確認" /><input type="reset" value="重選" /> </form>
2、編寫後端功能Servlet代碼:
UploadFile.java:
具體實現思路:
——–1、設置編碼方式為utf-8,獲取字符流
——–2、創建DiskFileItemFactory工廠類對象,將文件封裝成單獨的FileItem對象
——–3、設置文件緩存目錄
——–4、加載文件緩存目錄,創建ServletFileUpload對象
——–5、設置文件編碼為utf-8
——–6、解析request請求,得到上傳文件的FileItem對象,得到的也就是所有的表單name
——–7、遍歷表單name集合,判斷哪一些是普通字段和文件字段,進行區分
——–8、得到所上傳的文件路徑名
——–9、截取文件名
——–10、設置上傳的目標文件夾路徑
——–11、通過字節流進行文件的對拷
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1、設置編碼方式為utf-8,獲取字符流 request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); PrintWriter write = response.getWriter(); //2、創建DiskFileItemFactory工廠類對象,將文件封裝成單獨的FileItem對象 DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory(); //3、設置文件緩存目錄 File file = new File("C:\\Cache"); if(!file.exists()) { //如果文件不存在,就創建一個文件 file.mkdirs(); } diskFileItemFactory.setRepository(file); //加載文件緩存目錄 //4、創建ServletFileUpload對象 ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory); //5、設置文件編碼為utf-8 fileUpload.setHeaderEncoding("utf-8"); //6、解析request請求,得到上傳文件的FileItem對象,得到的也就是所有的表單name --->比如:這裡隻有一個name="fileName" 拿到的就是這個集合 List<FileItem> fileItems = null; try { fileItems = fileUpload.parseRequest(request); } catch (FileUploadException e) { e.printStackTrace(); } //8、遍歷集合 for(FileItem fileItem:fileItems) { //文本域 //判斷是否為普通字段 if(fileItem.isFormField()) { //得到字段名、字段值 String name = fileItem.getFieldName(); // } //為文件域 else { //9、得到所上傳的文件路徑名 String fileName = fileItem.getName(); //10、截取文件名 String fiString = fileName.substring(fileName.lastIndexOf("\\")+1); //11、設置上傳的目標文件夾路徑 File filedir = new File("C:\\NewFile"); if(!filedir.exists()) { filedir.mkdir(); } // System.out.println(user.getUserName()); File filepath = new File(filedir+"\\"+fiString); // System.out.println(fiString); if(!filepath.exists()) { filepath.createNewFile(); } //獲得文件上傳流 InputStream in = fileItem.getInputStream(); //使用FileOutStream打開服務器端的上傳文件 FileOutputStream out = new FileOutputStream(filepath); //流的對拷 byte[] bb = new byte[1024]; int len ; while((len= in.read(bb))>0) { out.write(bb, 0, len); // out.close(); // in.close(); fileItem.delete(); //刪除臨時文件 } write.println("文件上傳成功<br/>"); } } }
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。