檔案上傳和檔案下載
阿新 • • 發佈:2018-11-28
檔案上傳:
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();