servlet處理文件上傳8

要做到文件上傳,客戶端編程有幾個要點
method的值使用post
enctype的值使用multipart/form-data
每一個控件都要有那麼屬性
例如

    <form action="upload" method="post" enctype="multipart/form-data">
        <input type="file" name="file1"><br />
        <input type="submit" value="上傳" />
    </form>

Servlet配置
1.在Servlet類上使用@MultipartConfig
MultipartConfig的屬性
1.fileSizeThershold int型 是(可選) 描述:當前數據量大於該值時,內容將被寫入文件。
2.location String型 是(可選) 描述:存放生成文件的地址
3.maxFileSize long型 是(可選) 描述:允許上傳的文件最大值,默認爲-1,表示沒有限制。
4.maxRequestSize long型 是(可選) 描述:針對 multipart/form-data 請求的最大數量,默認爲-1,表示沒有限制。

@WebServlet("/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {

2.在web.xml文件的servlet標籤中使用multipart-config標籤

<servlet>
    <servlet-name>uploadservlet</servlet-name>
    <servlet-class>com.tanlan.javaees1.UploadServlet</servlet-class>
    <multipart-config />
  </servlet>
  <servlet-mapping>
    <servlet-name>uploadservlet</servlet-name>
    <url-pattern>/upload</url-pattern>
  </servlet-mapping> 

獲取文件上傳中文件本身的信息
在Multipart請求中,每一個表單控件,都會被轉化成一個Part
怎麼獲取Part呢?
使用HttpServletRequest獲取Part
getPart:返回指定名稱的part
getParts:返回請求中所有的part

@WebServlet("/upload")
@MultipartConfig
public class UploadServlet extends HttpServlet {

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Part part = request.getPart("file1");
        System.out.println(part.getName());
        System.out.println(part.getSubmittedFileName());
        System.out.println(part.getSize());
        System.out.println(part.getContentType());
        Collection<String> heardersNames = part.getHeaderNames();
        for (String headerName : heardersNames) {
            System.out.println(headerName + ":" + part.getHeader(headerName));
        }
        String uploadDir=getServletContext().getRealPath("/upload");
        part.write(uploadDir+"\\"+part.getSubmittedFileName());

    }

}

Part接口的方法請參考相關的API文檔
接下來有幾個比較重要的方法:
write:參數是絕對位置,若是相對位置,則相對location的值
delete刪除上傳的文件
getInputStream:獲取輸入流
參數是絕對位置的時候

uploadDir=getServletContext().getRealPath("/upload");
part.write(uploadDir+"\\"+part.getSubmittedFileName());

相對位置的時候

@WebServlet("/upload2")
@MultipartConfig(maxRequestSize=1024*1024*15,maxFileSize=1024*1024*8,location="C:\\")
public class UploadServlet2 extends HttpServlet {

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.println(request.getParameter("name"));
        Collection<Part> parts=request.getParts();
        for (Part part : parts) {
            //文件
            if(part.getContentType()!=null){
                String fileName=part.getSubmittedFileName();
                if(!fileName.equals("")){
                    part.write(fileName);
                }
            }


        }

    }

服務器端編程要點:
檢查Part是普通表單控件還是文本上傳控件,判斷content-type的值是否是null
檢查文件名是否爲null,爲空則表示未選擇上傳文件,判斷文件名是否是””
文件存在則調用part的write方法,傳入一個絕對路徑或相對於location屬性指定的路徑

        System.out.println(request.getParameter("name"));
        Collection<Part> parts=request.getParts();
        for (Part part : parts) {
            //文件
            if(part.getContentType()!=null){
                String fileName=part.getSubmittedFileName();
                if(!fileName.equals("")){
                    part.write(fileName);
                }
            }


        }
發佈了48 篇原創文章 · 獲贊 1 · 訪問量 7485
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章