Servlet实现文件下载功能

时间:2021-05-20

本文实例为大家分享了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); 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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章