1. 程式人生 > >檔案上傳和檔案下載

檔案上傳和檔案下載

檔案上傳:

1.首先,設計前臺頁面。

要在form表單中加上 enctype="multipart/form-data",指明接收請求的Servlet。

<form action="upload" method="post" enctype="multipart/form-data" >
  <span>上傳檔案</span><input type="file" name="filename" value="上傳">
</form>

2.開發後臺的Servlet。

2.1 在上傳檔案的Servlet上打註解:@MultipartConfig

2.2. 獲取前臺頁面選擇的檔名。

原理分析:在firebug上看到的檔案上傳的請求頭為:

Content-Type: multipart/form-data; boundary=---------------------------16593218025140
Content-Length: 34211

-----------------------------16593218025140
Content-Disposition: form-data; name="fname"; filename="session (1).png"
Content-Type: image/png

每個檔案都是一個Part,以前臺的name屬性標記,filename="session (1).png"

為上傳的檔名。

取出檔名:

request.setCharacterEncoding("utf-8");
Part part = request.getPart("filename");
        //獲得上傳的檔名
        String header = part.getHeader("Content-Disposition");
        int start = header.lastIndexOf("=");
        int end=header.lastIndexOf("\"");
        String fname= header.substring
(start+2, end); System.out.println(fname);

如果上傳多個檔案,Collection<Part> parts = request.getParts(); 遍歷parts,依次獲取檔名。

2.3 將上傳的檔案存放在指定的路徑下。


String path=request.getRealPath("/");//獲取部署到tomcat下的檔案路徑
         System.out.println(path);
         String filename=path+fname;
         part.write(filename);

檔案下載:

1.設定響應的檔案型別

response.setContentType("application/octet-stream");

2.Response設定響應頭Content-Dispostion,指定要下載的檔案和下載方式。

response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));

attachment:表示檔案輸出流會以附件的方式下載

3.讀檔案到輸入流,寫到response物件的輸出流中,將資料重新整理到磁碟

InputStream in=new FileInputStream(request.getRealPath("/")+fname);
        ServletOutputStream out = response.getOutputStream();
        byte[] b=new byte[1024];
        int len=0;
        while((len=in.read(b))!=-1){
            out.write(b,0,len);
        }
        //將資料重新整理到磁碟
        out.flush();