文件上傳

文件上傳


導入commons-fileupload-1.2.2.jar
 和commons-io-2.4.jar


1.設置jsp文件內的form表單


(1)method="post"方式提交;
(2)編碼類型enctype="multipart/form-data";
(3)文件上傳框<input type="file" name="file"/>必須設置name屬性。


2.設置servlet頁面


(1)設置request請求編碼爲"UTF-8";


(2)通過DiskFileItemFactory創建制造工廠
創建文件上傳的核心類ServletFileUpload  


(3)用ServletFileUpload.isMultipartContent(request)
   判斷request請求的編碼類型是否是文件上傳類型multipart/form-data
   返回boolean值。


(4)獲取上傳文件的絕對路徑。


(5)如果返回值是true,也就是說是文件上傳編碼類型,
   則用得到的文件上傳的核心類ServletFileUpload解析request
   創建的文件上傳類名.parseRequest(request)


(6)如果獲取的集合不爲空值,則進行遍歷並且判斷遍歷的文件類型是否是普通輸入框;
   若是,則用InputStream流對文件進行讀取,這是要注意瀏覽器獲取文件名的兼容性,
   爲防止文件名獲取錯誤,要對得到的文件名進行substring分割,
   再用FileOutputStream流和buffer方法,將文件寫入,關閉流,文件上傳成功!


upload.jsp

<form action="${pageContext.request.contextPath}/uploadFileServlet" method="post" enctype="multipart/form-data">
 用戶名:<input name="uname"/>
 文件上傳:<input type="file" name="file"/>
 <input type="submit" value="上傳"/>
</form>


uploadFileServlet.java

 

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.servlet.ServletException;
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;

public class uploadFileServlet extends HttpServlet {
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  request.setCharacterEncoding("UTF-8");
  //獲取DiskFileItemFactory
  DiskFileItemFactory dfactory = new DiskFileItemFactory();
  //2.獲取文件上傳的核心類ServletFileUpload
  ServletFileUpload sfup = new ServletFileUpload(dfactory);
  //3判斷請求是否是multipart/form-data
  boolean flag = ServletFileUpload.isMultipartContent(request);
  //獲取上傳文件的絕對路徑
  String realPath = this.getServletContext().getRealPath("files");
  System.out.println(this.getServletContext());
  System.out.println(realPath);
  if(flag){
   try {
    //解析request
    List<FileItem> items = sfup.parseRequest(request);
    if(items!=null){
     //遍歷
     for (FileItem fileItem : items) {
      //判斷如果是普通輸入框
      if(fileItem.isFormField()){
       String fieldName = fileItem.getFieldName();
       String value = fileItem.getString();
       System.out.println(fieldName+"---"+value);
      }else{
       //就是文件上傳input
       System.out.println("文件上傳開始。。");
       InputStream inputStream = fileItem.getInputStream();
       //獲取上傳文件的文件名
       String filename = fileItem.getName();
       filename=filename.substring(filename.lastIndexOf("\\")+1);
       System.out.println("文件名:"+filename);
       FileOutputStream fos = new FileOutputStream(realPath+"\\"+filename);
       
       byte[] buffer = new byte[1024];
       int len = 0;
       while((len=inputStream.read(buffer))!=-1){
        fos.write(buffer, 0, len);
       }
       inputStream.close();
       fos.close();
       System.out.println("文件上傳成功!");
      }
     }
    }
    
   } catch (FileUploadException e) {
    e.printStackTrace();
   }
  }
 }
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  doGet(request, response);
 }

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章