本文實例為大家分享了Servlet實現(xiàn)文件下載的具體代碼,供大家參考,具體內(nèi)容如下
把文件目錄直接暴露給用戶是很不安全的。所以要用Servlet來做,而且這樣做,文件的存儲方式就更豐富了,可以是從文件系統(tǒng)上取來的,也可以是數(shù)據(jù)庫中經(jīng)過計算生成的,或者從其它什么稀奇古怪的地方取來的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
public class DownloadServlet extends HttpServlet { private String contentType = "application/x-msdownload" ; private String enc = "utf-8" ; private String fileRoot = "" ; /** * 初始化contentType,enc,fileRoot */ public void init(ServletConfig config) throws ServletException { String tempStr = config.getInitParameter( "contentType" ); if (tempStr != null && !tempStr.equals( "" )) { contentType = tempStr; } tempStr = config.getInitParameter( "enc" ); if (tempStr != null && !tempStr.equals( "" )) { enc = tempStr; } tempStr = config.getInitParameter( "fileRoot" ); if (tempStr != null && !tempStr.equals( "" )) { fileRoot = tempStr; } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String filepath = request.getParameter( "filepath" ); String fullFilePath = fileRoot + filepath; /*讀取文件*/ File file = new File(fullFilePath); /*如果文件存在*/ if (file.exists()) { String filename = URLEncoder.encode(file.getName(), enc); response.reset(); response.setContentType(contentType); response.addHeader("Content-Disposition", "attachment; filename=\"" + filename + "\""); int fileLength = (int) file.length(); response.setContentLength(fileLength); /*如果文件長度大于0*/ if (fileLength != 0) { /*創(chuàng)建輸入流*/ InputStream inStream = new FileInputStream(file); byte[] buf = new byte[4096]; /*創(chuàng)建輸出流*/ ServletOutputStream servletOS = response.getOutputStream(); int readLength; while (((readLength = inStream.read(buf)) != - 1 )) { servletOS.write(buf, 0 , readLength); } inStream.close(); servletOS.flush(); servletOS.close(); } } } |
web.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
< servlet > < servlet-name >downloadservlet-name> < servlet-class >org.mstar.servlet.DownloadServletservlet-class> < init-param > < param-name >fileRootparam-name> < param-value >d:/tempparam-value> init-param> < init-param > < param-name >contentTypeparam-name> < param-value >application/x-msdownloadparam-value> init-param> < init-param > < param-name >encparam-name> < param-value >utf-8param-value> init-param> servlet> < servlet-mapping > < servlet-name >downloadservlet-name> < url-pattern >/downurl-pattern> servlet-mapping> |
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。
原文鏈接:http://www.cnblogs.com/mingzi/archive/2009/03/09/1406810.html