您好,登錄后才能下訂單哦!
本文實例為大家分享了Servlet實現文件下載的具體代碼,供大家參考,具體內容如下
把文件目錄直接暴露給用戶是很不安全的。所以要用Servlet來做,而且這樣做,文件的存儲方式就更豐富了,可以是從文件系統上取來的,也可以是數據庫中經過計算生成的,或者從其它什么稀奇古怪的地方取來的。
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) { /*創建輸入流*/ InputStream inStream = new FileInputStream(file); byte[] buf = new byte[4096]; /*創建輸出流*/ 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
<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>
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。